HTTP中的内容编码与传输编码的区别

10

我有一个关于Content-Encoding和Transfer-Encoding用法的问题:

请让我知道我的理解是否正确:

客户端在其请求中可以使用accept-encoding头指定它愿意接受哪些编码类型。因此,如果服务器希望在传输之前对消息进行编码,例如gzip,则可以压缩实体(内容)并添加content-encoding:gzip,然后发送HTTP响应。在接收时,客户端可以接收、解压缩并解析实体。

在传输编码的情况下,客户端可以指定它愿意接受哪种编码并执行即时操作。也就是说,如果客户端发送TE:gzip; q = 1,则表示如果服务器愿意,它可以发送一个带有Transfer-Encoding:gzip的200 OK,并在尝试发送流时进行压缩并发送,客户端在接收内容时可以即时解压缩并执行其解析。

我的理解正确吗?请评论。

此外,即时压缩实体与先压缩实体再传输的基本优势是什么? Transfer-Encoding是否仅适用于分块响应,因为我们不知道在传输之前实体的大小?


请参见https://dev59.com/gWgu5IYBdhLWcg3wBym1。 - Myrne Stol
1个回答

16

2
感谢您回答我的问题。请原谅我的无知,消息层与有效载荷层有何不同?有效载荷层是否意味着(实体或实体的表示),而消息层是否意味着完整的HTTP头+实体? - Vamsi Mohan
此外,根据RFC 7230的规定:“传输编码名称用于指示对有效载荷体应用、可以应用或可能需要应用的编码转换,以确保通过网络的“安全传输”。这与内容编码不同,因为传输编码是消息的属性,而不是正在传输的表示的属性。”您能帮我理解消息属性与表示属性的区别吗? - Vamsi Mohan
2
“传输编码(遗憾的是)在实践中并未得到实现” - Transfer-Encoding: chunked 得到广泛应用,因此这需要一些限定。 - Myrne Stol
用户3623821:消息是在网络上传输的内容。有效载荷是在传输编码之前的内容。 - Julian Reschke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接