HTTP 2.0

本文介绍了HTTP的发展历程,从HTTP/0.9到HTTP/1.1,强调了HTTP/1.x的连接和头部数据浪费问题。接着详细探讨了HTTP/2.0的技术革新,包括二进制分帧、服务器推送、头部压缩和协议协商机制。最后,讨论了HTTP/2.0的客户端和服务器支持情况以及如何检查网站是否启用HTTP/2.0。

HTTP的历史

HTTP/0.9(1991)

请求示例:

telnet example.com 80
GET /
<html>...
?

主要特性:

  • 仅支持GET方法
  • 响应类型仅超文本
  • 没有HTTP header
  • 连接在文档传输完毕后断开

备注:现在基本上大部分服务器已经不支持

HTTP/1.0(1996)

请求:

telnet example.com 80
GET / HTTP/1.0
User-Agent: HappyBrowser
Accept: */*

响应:

HTTP/1.0 200 OK
Content-Type: text/html
Server: HappyServer

<h1>It works</h1>
?

主要特性:

  • 增加了请求和响应header的支持(HTTP版本号、响应码和contentType)
  • 响应内容不在局限超文本(Content-Type用来标记其他资源的能力,如脚本、样式或媒体文件)
  • 增加了HEAD、POST方法的支持
  • 连接在响应传输完毕后依然会断开

HTTP/1.1 最常见的版本

http1.1 的标准最初是1999年提出,后来又不断有新的功能加入。
请求:

GET /sales/ HTTP/1.1
Host: www.mafengwo.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://www.mafengwo.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: mfw_uuid=5c74d16c-0900-dc1c-5d20-c579f2cbf02c; uva=s%3A78%3A%22a%3A3%3A%7Bs%3A2%3A%22lt%22%3Bi%3A1551160082%3Bs%3A10%3A%22last_refer%22%3Bs%3A6%3A%22direct%22%3Bs%3A5%3A%22rhost%22%3Bs%3A0%3A%22%22%3B%7D%22%3B; __mfwurd=a%3A3%3A%7Bs%3A6%3A%22f_time%22%3Bi%3A1551160082%3Bs%3A9%3A%22f_rdomain%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22f_host%22%3Bs%3A3%3A%22www%22%3B%7D; __mfwuuid=5c74d16c-0900-dc1c-5d20-c579f2cbf02c; UM_distinctid=16928588422186-0b9d939d8c4e34-36667105-13c680-169285884234f; mafengwo=9f8394af8a9966831e7983269da5caca_57022634_5c8b78a19ede19.06690157_5c8b78a19ede83.17999445; mfw_uid=57022634; PHPSESSID=folqrtiba2scaf4l5m80tn7bf4; __omc_chl=; __jsluid_h=844a8202521a956499032b60f37c890d; __mfwothchid=referrer%7Cwww.google.com; __mfwc=referrer%7Cwww.google.com; Hm_lvt_8288b2ed37e5bc9b4c9f7008798d2de0=1561357018,1561618439,1562290042,1563286896; oad_n=a%3A3%3A%7Bs%3A3%3A%22oid%22%3Bi%3A1029%3Bs%3A2%3A%22dm%22%3Bs%3A19%3A%22pagelet.mafengwo.cn%22%3Bs%3A2%3A%22ft%22%3Bs%3A19%3A%222019-07-16+22%3A21%3A36%22%3B%7D; __omc_r=; _r=mfwdev; _rp=a%3A2%3A%7Bs%3A1%3A%22p%22%3Bs%3A19%3A%22aos.mfwdev.com%2Fmain%22%3Bs%3
HTTP 2.02015 年基于 Google 的 SPDY 协议推出,注重性能改善,但还未普及 [^2]。 ### HTTP 2.0 报文介绍 HTTP 2.0 报文同样是用于在客户端和服务器之间传输数据的载体,不过它相较于之前的 HTTP 版本在设计上有了较大改进,以提高传输效率和性能。 ### HTTP 2.0 报文结构 - **二进制分帧**:HTTP 2.0 将报文分成更小的帧,并采用二进制格式进行编码。它把 HTTP 消息分解为二进制编码帧的序列,这些帧根据不同的类型有不同的用途,例如头部帧、数据帧等。这种二进制分帧的结构使得报文在传输过程中更高效,解析也更加容易。 - **流与多路复用**:多个请求和响应可以在同一个 TCP 连接上以流的形式并行传输。每个流都有一个唯一的标识符,不同流的帧可以交错发送,然后在接收端根据流标识符重新组装成完整的请求或响应。这样可以避免 HTTP 1.x 中串行请求导致的队头阻塞问题。 ### HTTP 2.0 报文特点 - **性能提升**:通过二进制分帧和多路复用,HTTP 2.0 能够显著提高传输性能,减少延迟。因为多个请求和响应可以同时在一个连接上传输,不需要像 HTTP 1.x 那样为每个请求建立新的连接。 - **头部压缩**:HTTP 2.0 使用 HPACK 算法对头部信息进行压缩。在 HTTP 1.x 中,每次请求都会携带大量重复的头部信息,造成了带宽的浪费。而 HTTP 2.0 通过头部压缩,减少了头部信息的传输量,进一步提高了传输效率。 - **服务器推送**:服务器可以主动向客户端推送资源,而不需要客户端显式地请求。例如,当客户端请求一个 HTML 页面时,服务器可以同时推送相关的 CSS、JavaScript 等资源,减少客户端的请求次数,加快页面的加载速度。 ```python # 这里并没有直接操作 HTTP 2.0 报文的 Python 代码示例,因为 Python 标准库中没有原生支持 HTTP 2.0 的模块, # 不过可以使用第三方库如 hyper 来处理 HTTP 2.0 请求 import hyper conn = hyper.HTTP20Connection('example.com') conn.request('GET', '/') resp = conn.get_response() print(resp.read()) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值