我想通过http向服务器发送大量的json。
如果我使用" Content-Encoding":" GZIP"在我的httpClient中,它会自动将请求体转换为压缩格式吗?
答案 0 :(得分:2)
不,RFC 7231描述了内容编码。如果您要发送Content-Encoding
,则需要确保该编码中的内容 。
如果您以纯文本形式发送Content-Encoding: gzip
和消息,您将(非常正确地)收到HTTP 400
。 gzip
消息的正文始终以0x1f 0x8b
开头,如果服务器在POST请求中找不到该int,则抱怨是正确的。
另一个原因是你需要一个合适的Content-Length
标题。这不是原始JSON的长度,它必须是gzip压缩JSON的长度(以字节为单位)。
您需要在发送任何内容之前执行JSON的gzip
,因为您需要事先了解Content-Length
中的内容。
额外注意:如果JSON很大(例如几千兆字节),您可能需要Transfer-Encoding: chunked
,这有其自身的复杂性。 (你不发送Content-Length
但是将夹头的长度添加到身体本身。)
答案 1 :(得分:1)
如果它自动执行此操作,则100%依赖于您正在使用的http客户端以及它们是否以这种方式实现。通常设置标题将不自动编码,至少在我经常使用的客户端中。