使用"内容编码":" GZIP"

时间:2016-09-13 00:27:32

标签: http http-headers

我想通过http向服务器发送大量的json。

如果我使用" Content-Encoding":" GZIP"在我的httpClient中,它会自动将请求体转换为压缩格式吗?

2 个答案:

答案 0 :(得分:2)

不,RFC 7231描述了内容编码。如果您要发送Content-Encoding,则需要确保该编码中的内容

如果您以纯文本形式发送Content-Encoding: gzip和消息,您将(非常正确地)收到HTTP 400gzip消息的正文始终以0x1f 0x8b开头,如果服务器在POST请求中找不到该int,则抱怨是正确的。

另一个原因是你需要一个合适的Content-Length标题。这不是原始JSON的长度,它必须是gzip压缩JSON的长度(以字节为单位)。

您需要在发送任何内容之前执行JSON的gzip,因为您需要事先了解Content-Length中的内容。

额外注意:如果JSON很大(例如几千兆字节),您可能需要Transfer-Encoding: chunked,这有其自身的复杂性。 (你不发送Content-Length但是将夹头的长度添加到身体本身。)

答案 1 :(得分:1)

如果它自动执行此操作,则100%依赖于您正在使用的http客户端以及它们是否以这种方式实现。通常设置标题将自动编码,至少在我经常使用的客户端中。