· 3 分钟阅读时长 · 1495 字 · -阅读 -评论

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

  1. HTTP是个已有30多年的历史的协议
  2. HTTP通常建立在TCP/IP协议之上,但HTTP协议中并没有规定它必须使用或支持的层。因此HTTP可以在任何互联网协议或其它网络上实现
  3. 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

  1. 大量的WEB还处于1.1到2的升级过程中
  2. 任何HTTP协议,比如HTTP2支持需要WEB本身容器如nginx及访问终端如chrome支持
    • 因此比如HTTP3还属于草案,如果想尝鲜既需要在容器上配置支持该协议,也需要安装比如Chrome canary开启QUIC才可以尝鲜
  3. TLS即HTTPS在HTTP1.1上也支持,并非需要一定是2
  4. 部分WEB已经支持了HTTP3,比如YouTube
    • 测试站点是否支持3,可以使用该工具https://gf.dev/http3-test

HTTP in Chrome DevTools

正如一开始所说前端不可避免要多接触HTTP请求,而查看请求的终端最多的就是Chrome,借助于Chrome的我们也可以一方面的多了解HTTP,一方面更了解WEB在执行HTTP请求时的一些机制问题。

  1. 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即是

  2. “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

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

参考文档

Alan H
Authors
开发者,数码产品爱好者,喜欢折腾,喜欢分享,喜欢开源