http2 是二进制协议、 http1.x 是文本协议,怎么理解啊?

2018-12-03 15:56:07 +08:00
 phx13ye
请求响应在网络上传输不是都是二进制吗?
用上 http2 的网站,dev tools 还是看得到具体请求头和响应,是浏览器做的编解码吗?
4371 次点击
所在节点    HTTP
10 条回复
xenme
2018-12-03 16:03:32 +08:00
所有的协议,只要你知道怎么解析,都能看得到。
浏览器最终要显示,肯定能看到,必然要支持协议。

另外,二进制可能是指的传输过程。
flowfire
2018-12-03 16:11:29 +08:00
在应用层分别是是二进制和文本,进了传输层都是二进制
est
2018-12-03 16:13:29 +08:00
http 1.x 是文本协议的意思就是说你多一个空格,换行是 \r\n 都可以可以兼容的。不信你去试

(不过不同的 web 服务器兼容性不一样,特别是大陆那台全国级的 web 服务器)
phx13ye
2018-12-03 18:55:43 +08:00
@flowfire
@xenme
@est
可以理解为,在解码的时候,http1.x 协议要先把二进制字节变成文本,再对文本进行一次解析才可以分析出报文,而 http2.0 不需要吗?

我按 1.x 的方式用 curl 请求 cloudflare 这种 http2 的网站,是 curl 帮我把 2.0 的帧封装并解析的吗?
```
└─[$] <> curl -i -X POST -H "Content-Type: application/json" -d "{\"foo\":\"bar\"}" https://www.cloudflare.com


HTTP/2 403
date: Mon, 03 Dec 2018 10:53:59 GMT
content-type: text/html; charset=UTF-8
```
SoloCompany
2018-12-04 00:15:37 +08:00
排除 tls
主要是指 header 部分的传输
二进制编码可以更高效率的压缩
比如 content-type 占 12 字节,enum key 就只占一到两个字节
est
2018-12-04 09:25:05 +08:00
@phx13ye 我估计是 cf 返回乱填了一个 HTTP/2

你试试 CURLOPT_HTTP_VERSION=CURL_HTTP_VERSION_2_0 curl -i -X POST -H "Content-Type: application/json" -d "{\"foo\":\"bar\"}" https://www.cloudflare.com 这个命令呢?
est
2018-12-04 09:25:49 +08:00
curl --http2
phx13ye
2018-12-04 10:25:32 +08:00
@est 我的环境没有这两个变量$CURLOPT_HTTP_VERSION $CURL_HTTP_VERSION_2_0
用 http1.1
```
└─[$] <> curl --http1.1 -i -X POST -H "Content-Type: application/json" -d "{\"foo\":\"bar\"}" cf 的网址( v2 说我带外链)
HTTP/1.1 403 Forbidden
Date: Tue, 04 Dec 2018 02:23:25 GMT
```
用 http2
```
└─[$] <> curl --http2 -i -X POST -H "Content-Type: application/json" -d "{\"foo\":\"bar\"}" cf 的网址( v2 说我带外链)
HTTP/2 403
date: Tue, 04 Dec 2018 02:23:17 GMT
```
est
2018-12-04 10:43:56 +08:00
@phx13ye 这个看起来就是 curl 自动把二进制的还原成可读的文本了。你试试抓包。
lieh222
2018-12-04 13:54:58 +08:00
手动实现简单的 http1.1 http2 服务端之后你就懂了,http2 可能较难,量力而行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX