title: “HTTP发展历程” tags: [] slug: ‘16e51059’ date: 2021-03-03 22:57:32 summary: “本文介绍HTTP发展历程,包括HTTP定义、版本历史、Chrome DevTools中的HTTP请求、HTTPS解密抓包等,以提高了解HTTP发展历程的效率。”
As a frontend developer, we constantly inspect Network requests. I lacked a systematic review of HTTP, so I compiled one to solidify understanding.
What is HTTP
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议HTTP是万维网的数据通信的基础。HTTP协议是1989年发起的,当前标准由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调发布。
Key points
- HTTP是个已有30多年的历史的协议
- HTTP通常建立在TCP/IP协议之上,但HTTP协议中并没有规定它必须使用或支持的层。因此HTTP可以在任何互联网协议或其它网络上实现
- HTTP请求的发起端不一定是在浏览器,爬虫或者其他工具均可
Versions
当前HTTP2已是主流但有必要了解HTTP协议的发展历程,从而更好的熟悉它。
HTTP/0.9- 只接受get请求,没有指定版本号在请求行
HTTP/1.0- 第一个指定版本号版本
- 支持HEAD , POST方法
- 头部字段支持,请求体内容类型,响应体状态码等支持
- 强缓存,If-Modified-Since,Expires
HTTP/1.1
- 支持GET , HEAD , POST , PUT , DELETE , TRACE , OPTIONS方法
- Persistent connections by default
- Multiple requests can be sent sequentially on a single TCP connection
- 长连接在空闲一段时间后即会关闭
- Pipelining allows sending requests without waiting for responses, but it’s off by default and rarely used.
- 压缩/解压送,协商缓存等性能优化支持
- host头处理
HTTP/2
Multiplexing
True parallelism on a single connection
Request prioritization
优先级由请求客户端决定,比如浏览器会按照请求资源类型,来控制优先级,对于开发来说这点是不能手动指定的。

Server push
Header compression
HTTP/3 (draft → adoption)
- 底层协议由TCP换成基于UDP的QUIC
- 缩短连接建立时间

Remember
- 大量的WEB还处于1.1到2的升级过程中
- 任何HTTP协议,比如HTTP2支持需要WEB本身容器如nginx及访问终端如chrome支持
- 因此比如HTTP3还属于草案,如果想尝鲜既需要在容器上配置支持该协议,也需要安装比如Chrome canary开启QUIC才可以尝鲜
- TLS即HTTPS在HTTP1.1上也支持,并非需要一定是2
- 部分WEB已经支持了HTTP3,比如YouTube
- 测试站点是否支持3,可以使用该工具https://gf.dev/http3-test
HTTP in Chrome DevTools
正如一开始所说前端不可避免要多接触HTTP请求,而查看请求的终端最多的就是Chrome,借助于Chrome的我们也可以一方面的多了解HTTP,一方面更了解WEB在执行HTTP请求时的一些机制问题。
With HTTP/2 multiplexing, multiple concurrent requests share a single connection, but browsers still cap connections per origin.
In Chrome, the per‑origin connection cap is typically 6.
因为同一个域名下连接复用,因此TCP连接ID一致,在network下的connectionID即是

“canceled” often occurs when a navigation interrupts in‑flight requests — a client‑side cancellation, not a server error.
Decrypting HTTPS for debugging
随着Chrome对HTTPS的大力推广,可以看到大多数网站都已上了HTTPS,如果是本身在浏览器即客户端下查看HTTPS请求数据的话,与HTTP没什么不同,但是如果想分析App中发起的HTTP请求的话,明显App本身是不提供界面的,这时就需要代理软件来拦截流量,从而抓包分析了。但抓包之后会发现一堆二进制数据看不懂,原因即是这个TLS的功劳,如何也想浏览器那样可以正常查看数据呢,需要解决的是证书。
Since trust anchors come from the OS store, installing your proxy’s root CA allows on‑the‑fly TLS decryption. Not all sites permit this (certificate pinning will break it).


Final Thoughts
寥寥数笔,权当学习回顾了。

