首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
V2EX  ›  HTTP

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

  •  
  •   phx13ye · 286 天前 · 1703 次点击
    这是一个创建于 286 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请求响应在网络上传输不是都是二进制吗?
    用上 http2 的网站,dev tools 还是看得到具体请求头和响应,是浏览器做的编解码吗?
    10 回复  |  直到 2018-12-04 13:54:58 +08:00
        1
    xenme   286 天前   ♥ 1
    所有的协议,只要你知道怎么解析,都能看得到。
    浏览器最终要显示,肯定能看到,必然要支持协议。

    另外,二进制可能是指的传输过程。
        2
    flowfire   286 天前 via iPhone   ♥ 1
    在应用层分别是是二进制和文本,进了传输层都是二进制
        3
    est   286 天前   ♥ 1
    http 1.x 是文本协议的意思就是说你多一个空格,换行是 \r\n 都可以可以兼容的。不信你去试

    (不过不同的 web 服务器兼容性不一样,特别是大陆那台全国级的 web 服务器)
        4
    phx13ye   286 天前
    @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
    ```
        5
    SoloCompany   286 天前 via iPad
    排除 tls
    主要是指 header 部分的传输
    二进制编码可以更高效率的压缩
    比如 content-type 占 12 字节,enum key 就只占一到两个字节
        6
    est   285 天前
    @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 这个命令呢?
        7
    est   285 天前
    curl --http2
        8
    phx13ye   285 天前
    @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
    ```
        9
    est   285 天前
    @phx13ye 这个看起来就是 curl 自动把二进制的还原成可读的文本了。你试试抓包。
        10
    lieh222   285 天前
    手动实现简单的 http1.1 http2 服务端之后你就懂了,http2 可能较难,量力而行
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1459 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 00:04 · PVG 08:04 · LAX 17:04 · JFK 20:04
    ♥ Do have faith in what you're doing.