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

关于 HTTP 中编码一点疑问

  •  1
     
  •   yezheyu · 2021-12-13 09:52:58 +08:00 · 1359 次点击
    这是一个创建于 836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 HTTP2 协议中,数据是使用二进制传输。

    对于这个二进制传输,我不太理解。

    假设我给服务器发送的是文本消息:你好

    在 HTTP1.1 中会在 head 中标注上:content-type: text/html; charset=UTF-8

    然后 body 中把 "你好" 按 utf-8 编码表转成0x4F60(你) 0x597D(好)对应的一长串的二进制形式传输

    "你好" 在网络上传输就是二进制传输,为啥不算二进制流?

    是因为使用的是文本编码格式吗?

    那在 HTTP2 中不使用文本格式编码,怎么处理 "你好" 呢?

    是新制定一种编码格式吗?

    比如我自定义一种 newCoding 编码:

    你 ---> 01

    好 ---> 10

    在 head 中声明content-type: application/binary; newCoding

    然后 body 中就直接发送01 10

    我可以这样理解吗?

    3 条回复    2021-12-13 10:45:52 +08:00
    monkeyWie
        1
    monkeyWie  
       2021-12-13 10:07:56 +08:00
    没错,http2 用了哈夫曼编码和你理解的这个意思差不多
    monkeyWie
        2
    monkeyWie  
       2021-12-13 10:10:50 +08:00
    再补充下,body 是不会做编码映射的,因为 body 里的内容没有规则,只是 http 头之类的
    coolzjy
        3
    coolzjy  
       2021-12-13 10:45:52 +08:00
    header 中会使用霍夫曼编码或静态 /动态字典来压缩,但 body 中仍然与 http 一样,使用的是 text/gzip/brotli 编码 /压缩的内容。

    所谓二进制,指的是二进制分帧。可以理解为 HTTP/1.x 中一个 HTTP 请求 /响应是不可再分的原子结构,一个请求没有结束时,UA 不可能再发起第二个请求(同一个连接上)。而 HTTP/2 中请求 /响应则可以被进一步拆解为二进制帧,不同请求的二进制帧可以交错传输,解决了队首阻塞的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4195 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 01:01 · PVG 09:01 · LAX 18:01 · JFK 21:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.