HTTP相关知识点
OSI模型
OSI七层模型
OSI模型是一个概念模型,用于描述和标准化各种计算机网络中的功能分层。该模型将网络通信分为七个层次,每一层都有其特定的功能,并且支持上层或被下层支持。下面列出了每一层的基本功能和与之相关的一些主要协议:
1. 物理层(Layer 1: Physical Layer)
负责传输原始比特流(即电信号、光信号等)。
- 协议与标准:Ethernet、IEEE 802.3、Cable、DSL、ISDN、USB、Bluetooth、RS-232(串行端口标准)、光纤等。
2. 数据链路层(Layer 2: Data Link Layer)
负责在物理网络之上提供错误检测和修正的方法。
- 协议与标准:Ethernet、PPP(点对点协议)、STP(生成树协议)、ARP(地址解析协议)、RARP(反向地址解析协议)、VLAN、IEEE 802.11(Wi-Fi的一部分)、Frame Relay。
3. 网络层(Layer 3: Network Layer)
负责数据包从源到目的地的传递和路由选择。
- 协议:IP(Internet Protocol,包括IPv4和IPv6)、ICMP(Internet Control Message Protocol,用于发送错误报告和操作信息)、IGMP(Internet Group Management Protocol,用于视频广播和多播)、OSPF(开放最短路径优先,一种路由协议)、BGP(边界网关协议,另一种路由协议)、IPsec(用于安全通信的协议集)。
4. 传输层(Layer 4: Transport Layer)
负责提供端到端的通信服务,包括错误检查、数据流控制和传输的可靠性。
- 协议:TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)、SCTP(Stream Control Transmission Protocol)、DCCP(Datagram Congestion Control Protocol)。
5. 会话层(Layer 5: Session Layer)
负责在网络中的两节点之间管理会话,包括会话的建立、维护和终止。
- 协议:NetBIOS(网络基本输入输出系统)、SSH(Secure Shell,安全外壳协议)、TLS(传输层安全协议)、RPC(远程过程调用)、PPTP(点对点隧道协议)。
6. 表示层(Layer 6: Presentation Layer)
负责数据的表示、加密和解密,压缩和解压缩。
- 协议:JPEG、MPEG、MIDI、ASCII、EBCDIC、TIFF、GIF、PICT、加密格式如SSL(安全套接层)、TLS。
7. 应用层(Layer 7: Application Layer)
为最终用户提供网络服务。
- 协议:HTTP(超文本传输协议)、HTTPS(HTTP安全)、FTP(文件传输协议)、TFTP(简单文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议版本3)、IMAP(互联网消息访问协议)、Telnet、DNS(域名系统)、SNMP(简单网络管理协议)、NTP(网络时间协议)、SIP(会话初始协议,用于VoIP通信)、DHCP(动态主机配置协议)、WebSocket、XMPP(可扩展消息和出席协议,用于即时通讯)。
每层的协议都专注于层次模型的特定方面,工作在一起为用户提供无缝的网络通信体验。理解这些协议以及它们如何在OSI模型中交互,有助于深入理解网络的复杂性和设计更好的网络应用。
五层模型
五层模型是对OSI模型的简化,通常用于教学和理论研究中,它合并了OSI模型的某些层:
物理层(Physical Layer)
数据链路层(Data Link Layer)
网络层(Network Layer)
传输层(Transport Layer)
应用层(Application Layer):
在五层模型中,应用层合并了OSI模型的会话层、表示层和应用层的功能。它不仅处理应用程序的特定细节,还负责数据的表示和会话管理。
分类比较
在OSI七层模型中,每一层都有清晰的功能和职责,使得模型非常详细但复杂。五层模型通过合并一些功能层,简化了这种复杂性,使得学习和理解网络协议的层次结构更为容易。例如,将表示层和会话层的功能纳入应用层,可以减少在实际网络应用开发中的复杂性,因为现代应用程序开发通常在一个更集成的环境中处理数据格式和会话控制问题。
结论
尽管OSI七层模型提供了全面的网络协议框架,但在实际应用中,人们往往采用更简洁的模型(如五层模型或TCP/IP四层模型),这些模型更易于实施和理解,同时提供了足够的细节以支持复杂的网络通信需求。选择哪种模型,取决于特定的教育、研究或实际应用的需求。
TCP/IP四层模型
TCP/IP 四层模型是一个广泛使用的网络协议栈,它提供了一套从物理网络硬件到应用程序的网络通信的规范。这个模型是在1970年代由美国国防部赞助的研发项目中定义的,以支持不同网络系统之间的互联。TCP/IP 模型比 OSI 七层模型更早提出,并且在实际应用中更为流行,主要是因为它简单且直接与互联网标准和实践密切相关。
网络接口层(Network Interface Layer)
- 也称为链路层或网络访问层,负责与具体的物理网络技术相关联,处理与物理网络的实际连接、数据帧的封装和解封装、硬件地址寻址以及数据的错误检测和修正。
- 相关技术:Ethernet、Wi-Fi、PPP(点对点协议)、ATM 等。
互联网层(Internet Layer)
- 负责在多个网络之间传输数据包。这一层封装了数据包的寻址和路由功能,确保数据可以跨越多种连接的网络从源头到达目的地。
- 核心协议:IP(Internet Protocol),负责数据包的寻址和路由;ICMP(Internet Control Message Protocol),用于提供网络通信过程中的错误处理和状态报告;ARP(Address Resolution Protocol),用于解析网络层地址和链路层地址之间的映射。
传输层(Transport Layer)
- 负责为两台主机上的应用程序提供端到端的通信。在这一层中,有两个主要的协议:TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。
- TCP 提供一种可靠的、面向连接的服务,确保数据正确无误地从一个端传输到另一个端。
- UDP 提供一种不可靠的、无连接的服务,适用于那些不需要或无法承担建立连接开销的应用。
应用层(Application Layer)
- 负责处理特定的应用程序细节。它直接支持各种最终用户应用,如网页浏览、电子邮件、远程登录和文件传输。
- 相关协议:HTTP(HyperText Transfer Protocol)、HTTPS(HTTP Secure)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)、DNS(Domain Name System)等。
模型比较与实际应用
与 OSI 模型相比,TCP/IP 四层模型更简洁,其划分方式更贴近实际应用的需求和网络协议的实现。在实际应用中,TCP/IP模型提供的层次化结构帮助设计者和开发者清晰地分解网络通信问题,实现有效的网络应用和服务。此外,TCP/IP四层模型因其与互联网技术的直接关联而成为全球信息网络的基础。
总之,TCP/IP 四层模型不仅是学习网络通信的基础,也是现代网络环境中设计和实施网络解决方案的关键框架。
HTTP
HTTP(超文本传输协议)
是互联网上应用最广泛的协议之一,用于从服务器传输超文本到本地浏览器。随着网络技术的发展,HTTP
协议也经历了几次重要的迭代,主要包括HTTP/1.0、HTTP/1.1和HTTP/2.0
。每个版本都在性能、功能和效率上有所改进。
HTTP
协议是一种非常广泛的应用层协议。HTTP 往往是基于传输层
的TCP
协议实现的。(HTTP1.0
、HTTP1.1
、HTTP2.0
均基于TCP
协议,HTTP3
是基于UDP
实现的)
区别
HTTP/1.0
HTTP/1.0是早期的HTTP版本,它设定了基本的Web通信框架,但有一些限制:
- 无连接复用:每个HTTP请求都需要单独的TCP连接,请求结束后连接就关闭。这意味着每次请求都要经历TCP的连接建立和断开,导致延迟。
- 无Host头支持:早期的HTTP/1.0不支持虚拟主机,即在同一物理服务器上托管多个域名。
- 无状态协议:HTTP/1.0没有考虑如何维护状态,每个请求都是独立的。
HTTP/1.1
HTTP/1.1是对HTTP/1.0的重要改进,引入了多项优化措施,已成为最广泛使用的HTTP版本之一:
- 持久连接:HTTP/1.1默认使用持久连接(也称为连接复用)。在同一连接上可以传输多个HTTP请求和响应,减少了建立和关闭连接的开销。
- 管道化技术:允许在同一个连接上同时发送多个请求而不需要等待响应。这可以进一步改进HTTP的性能,尽管实际应用中由于队头阻塞问题这一特性并未广泛使用。
- 分块传输编码:允许发送方在发送整个响应前不必知道输出的总大小,便于发送动态生成的内容。
- 增加了缓存处理机制:如ETags、If-Modified-Since头,允许更有效的缓存管理。
- Host头支持:支持虚拟主机,允许在同一物理服务器上托管多个域名。
HTTP/2.0
HTTP/2.0是对HTTP协议的一次重大更新,它引入了二进制格式,提高了效率,减少了延迟,并引入了许多新的功能:
- 二进制协议:与HTTP/1.x的文本协议不同,HTTP/2.0使用二进制格式,这使得解析更高效,减少了错误。
- 多路复用:在同一个连接上并行交错地发送多个请求和响应,消除了队头阻塞,减少了延迟。
- 头部压缩:HTTP/2.0使用HPACK压缩格式压缩头部,减少了传输的数据量。
- 服务器推送:允许服务器未经请求即向客户端发送资源,预先加载资源以减少等待时间。
总结
从HTTP/1.0到HTTP/2.0,每一次HTTP协议的更新都是为了提高Web通信的效率和速度。HTTP/1.1通过持久连接和其他改进增强了性能;HTTP/2.0则通过引入多路复用、头部压缩、二进制格式等更现代的技术,进一步提高了性能和安全性,适应了现代网络应用对效率和速度的高需求。
HTTP请求格式
HTTP(超文本传输协议)请求由三个主要部分组成:起始行(Start Line)、请求头(Headers)和消息体(Body,可选)。下面是HTTP请求的详细格式和每个部分的作用:
1. 起始行(Start Line)
起始行包含HTTP方法、请求的URI(统一资源标识符)、以及HTTP版本。例如:
1 | GET /index.html HTTP/1.1 |
- HTTP方法:定义了对资源执行的操作类型,常见的方法有GET、POST、PUT、DELETE等。
- GET:请求获取指定的资源。
- POST:向指定的资源提交数据,通常用于提交表单。
- PUT:用于更新指定的资源。
- DELETE:请求删除指定的资源。
- URI:指定请求的资源。
- HTTP版本:指示消息使用的HTTP协议版本,如HTTP/1.1或HTTP/2.0。
2. 请求头(Headers)
请求头部包含了若干行,每行包括一个头字段名和一个值,二者以冒号分隔。这些头部提供了关于请求的信息,或者关于客户端本身的信息,例如内容类型、认证信息等。示例:
1 | Host: www.example.com |
- Host:请求的服务器地址。
- User-Agent:发出请求的用户代理软件信息。
- Accept:客户端能接收的内容类型。
- Accept-Language:优先的语言。
3. 空行
在请求头和消息体之间必须有一个空行,用来告诉服务器头部已经结束,接下来的内容是请求的消息体。
4. 消息体(Body)(可选)
请求的消息体包含要发送给服务器的数据。不是所有的HTTP请求都有消息体,比如GET请求就通常没有消息体,而POST请求通常会有。消息体可以包含如表单数据、文件上传等内容。例如,一个表单提交可以是:
1 | username=johndoe&password=123456 |
完整的HTTP请求示例
下面是一个完整的HTTP POST请求示例,包括起始行、头部和消息体:
1 | POST /submit-form HTTP/1.1 |
- Content-Type 告诉服务器消息体的媒体类型是
application/x-www-form-urlencoded
,表示这是表单数据。 - Content-Length 指示消息体的长度,这是一个必要的头部字段,如果消息体存在。
通过这种结构化的格式,HTTP协议能够有效地控制Web上的信息交换。理解HTTP请求的结构对于开发Web应用、调试和维护网络通信至关重要。