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