HTTP协议分析 | 青训营

111 阅读4分钟

HTTP是什么

HTTP超文本传输协议,全称为HyperText Transfer Protocol,是一种应用层协议。它是基于TCP协议的,用于在Web服务器和客户端之间传输超文本文档。

  • HTTP协议采用请求-响应模式,客户端发送请求,服务器端返回响应。
  • HTTP协议是一个简单可扩展的协议,通过URL指示来定位资源,并通过HTTP头部信息进行传递和处理。
  • HTTP协议是无状态的,每个请求都是独立的,服务器不保留之前的请求信息。

HTTP发展历程

HTTP/0.9**(1991年)

  • 最初的版本,仅支持GET请求方法。
  • 仅能传输HTML格式的内容,没有HTTP Header头部信息。
  • 没有支持状态码等特性。

HTTP/1.0**(1996年)

  • 引入了更多的请求方法,如POST、HEAD等。
  • 引入了HTTP Header头部信息,用于传递元数据。
  • 引入了状态码(例如200 OK、404 Not Found)来表示请求的结果状态。
  • 允许传输不仅仅是HTML,还可以是图像、视频等多媒体类型。

HTTP/1.1**(1997年)

目前最广泛使用的版本,大多数Web应用使用它。

  • 引入了持久连接(Keep-Alive),允许在同一个连接上进行多次请求响应交互,减少了连接的开销。
  • 引入了管道化(Pipeline),允许客户端在收到响应之前发送多个请求,提高了性能。
  • 引入了虚拟主机(Virtual Hosting),允许一个物理服务器上托管多个域名的网站。
  • 引入了缓存控制、内容协商等特性,优化了缓存和内容传输。
  • 引入了分块传输编码(Chunked Transfer Encoding),允许服务器分块发送数据,适用于大文件传输。

HTTP/2**(2015年)

  • 引入了二进制分帧层,将请求和响应消息分解成二进制格式的帧,提高了性能和并发性。
  • 多路复用(Multiplexing)允许在一个连接上同时发送多个请求和响应,避免了浏览器等待资源的情况。
  • 头部压缩(Header Compression)减少了消息头部的数据量,减小了网络传输开销。
  • 服务器推送(Server Push)允许服务器在客户端请求之前推送资源,加速页面加载。

HTTP/3(正在逐渐推出,基于QUIC协议)

  • 引入了新的传输协议QUIC,解决了TCP的一些问题,如连接建立的延迟和拥塞控制等。
  • 继续改进性能,减少延迟,提高安全性。
  • 使用UDP而非TCP,以减少握手时间

HTTP的发展一直在不断地演进,以适应日益复杂的网络环境和用户需求。这些版本的改进都旨在提高性能、安全性和用户体验。

HTTP协议分析

I9HAJZ5P4JQR3M0Q28YG5.png

GET请求一个指定资源的表示形式.使用GET的请求应该只被用于获取数据.
POST用于将实体提交到指定的资源.通常导致在服务器上的状态变化或副作用
PUT用请求有效载荷替换目标资源的所有当前表示
DELETE删除指定的资源
HEAD请求一个与GET请求的响应相同的响应.但没有响应体
CONNECT建立一个到由目标资源标识的服务器的隧道。
OPTIONS用于描述目标资源的通信选项。
TRACE沿着到目标资源的路径执行一个消息环回测试。
PATCH用于对资源应用部分修改。
  1. Safe (安全的) :不会修改服务器的数据的方法
    例如:GET HEAD OPTIONS
  2. Idempotent (幂等) :同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的(所有safe的方法都是Idempotent的) 例如GET HEAD OPTIONS PUT DELETE方法也是Idempotent的,因为它们会对目标资源进行替换或删除,多次执行的效果是一样的。
非Idempotent的方法有:

POST: 每次执行都会导致在服务器上的状态变化或副作用,所以不是Idempotent的。
CONNECT: 建立隧道的操作,每次执行都会建立一个新的隧道,所以不是Idempotent的。
TRACE: 执行消息环回测试,每次执行都会产生不同的结果,所以不是Idempotent的。
PATCH: 对资源应用部分修改,每次执行都会产生不同的结果,所以不是Idempotent的。