http - HTTP在OSI模型中处于哪一层?

标签 http http2 osi

有人说 HTTP 在 OSI 模型中处于 session 层。

但在 Tanenbaum 的计算机网络中,HTTP 在 OSI 模型中被称为应用层。

也有人说HTTP没有session的概念。是不是说HTTP不能在session层?

那么HTTP是不是在 session 层呢?谢谢。

更新:对于 HTTP/2,OSI 模型中的层是什么?

最佳答案

In which layer is HTTP in the OSI model?

它在应用层。请参阅 RFC 7230 中的以下引述,当前定义 HTTP/1.1 协议(protocol)的文档之一:

The Hypertext Transfer Protocol (HTTP) is a stateless application-level request/response protocol that uses extensible semantics and self-descriptive message payloads for flexible interaction with network-based hypertext information systems.

HTTP is a stateless request/response protocol that operates by exchanging messages across a reliable transport- or session-layer "connection".


Also some said that HTTP has no concept of session. Does it mean that HTTP can't be in the session layer?

正如之前在 RFC 7230 的引述中提到的那样,HTTP 协议(protocol)是无状态,其中从客户端到服务器的每个请求(应该)包含理解请求所需的所有信息,而不利用服务器上任何存储的上下文。

RFC 6265在 HTTP 中定义了一些状态管理机制,例如 cookie,允许在服务器端进行 session 管理(但它不会以任何方式使 HTTP 有状态)。

HTTP 中的session 概念与OSI 模型中的session 概念不同。总之,HTTP 是一个应用层协议(protocol)

OSI 模型

OSI(开放系统互连)模型是由国际标准化组织创建的概念模型,它使不同的通信系统能够使用标准协议(protocol)进行通信。

它为不同的计算机系统提供了一种能够相互通信的标准,可以看作是计算机网络的通用语言。它基于将通信系统拆分为七个抽象层的概念,每个抽象层堆叠在最后一个之上。

下图borrowed from Cloudflare很好地说明了 OSI 模型是什么样的:

The OSI model

应用层是唯一直接与用户数据交互的层。因此,网络浏览器和电子邮件客户端等软件应用程序依赖于应用程序层来启动通信。

但应该明确的是,客户端软件应用程序不是应用程序层的一部分:应用程序层负责协议(protocol)(如 HTTP 和 SMTP)和数据操作,软件依赖于向用户呈现有意义的数据。

OSI 模型与 TCP/IP 模型

虽然 OSI 模型是通用网络系统的综合引用框架,但值得一提的是,现代互联网并不严格遵循 OSI 模型。

现代 Internet 更紧密地遵循更简单的 Internet 协议(protocol)套件,通常称为 TCP/IP,因为该套件中的基础协议(protocol)是 TCP (传输控制协议(protocol))和 IP(互联网协议(protocol))。

下图说明了 OSI 和 TCP/IP 模型如何相互关联:

OSI model vs TCP/IP


Update: This section has been added to address the bounty started by noɥʇʎԀʎzɐɹƆ, who requested to update this answer with HTTP/2 details.

尽管引用了定义 HTTP/1.1 协议(protocol)的文档,但以上所有内容也适用于 HTTP/2。请参阅 RFC 7540 中的以下引述,定义HTTP/2协议(protocol)的文档:

An HTTP/2 connection is an application-layer protocol running on top of a TCP connection. The client is the TCP connection initiator.

关于http - HTTP在OSI模型中处于哪一层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596488/

相关文章:

http - 如何创建 400 错误请求以便我可以验证功能

ssl - HTTP/2 用于部署在 Intranet 上的应用程序/缺乏 SSL 可能性

c++ - 使用C++访问通过网卡传递的数据

tcp - OSI 模型 : SSH vs HTTP

http - 如何优化http请求

http - Bearer (JWT) 身份验证方案的身份验证信息 header

c# - 如何在 dotnet 核心中为 HttpClient 指定 HTTP/2 "prior knowledge"模式?

networking - WebSocket 协议(protocol)位于哪个 OSI 层?

php - 执行大量 http 请求 (HEAD) 的最快方法是什么?

php - HTTP2 和继续执行 PHP