Http 使用;内容编码";:&引用;GZIP“;

Http 使用;内容编码";:&引用;GZIP“;,http,http-headers,Http,Http Headers,我想通过http向服务器发送大量json 如果我使用“内容编码”:“GZIP”在我的httpClient中,它会自动将请求正文转换为压缩格式吗?否,描述内容编码。如果要发送内容编码,则需要确保内容采用该编码 如果您发送Content Encoding:gzip并以纯文本形式发送消息,您将(非常正确地)收到http400。gzip消息的正文将始终以0x1f 0x8b开头,如果服务器在POST请求中未找到,则可以投诉 另一个原因是您需要一个适当的内容长度标题。这不是原始JSON的长度,它必须是gzi

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

如果我使用“内容编码”:“GZIP”在我的httpClient中,它会自动将请求正文转换为压缩格式吗?

否,描述内容编码。如果要发送
内容编码
,则需要确保内容采用该编码

如果您发送
Content Encoding:gzip
并以纯文本形式发送消息,您将(非常正确地)收到
http400
gzip
消息的正文将始终以
0x1f 0x8b
开头,如果服务器在POST请求中未找到,则可以投诉

另一个原因是您需要一个适当的
内容长度
标题。这不是原始JSON的长度,它必须是gzip JSON的长度(以字节为单位)

您需要在发送任何内容之前执行JSON的
gzip
,因为您需要事先知道在
Content Length
中放置什么


额外注意:如果JSON那么大(例如,几GB),您可能需要
传输编码:chunked
,这会带来自身的复杂性。(您不发送
内容长度
,而是将夹头的长度添加到主体本身。)

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

a)RFC2295完全不相关;请参见RFC 7231。b) 我不知道你为什么认为T-E在这里是相关的…@JulianReschke-a)你是对的,更新了。b) 允许在帖子中使用T-E(据我所知),这是OP的一个选项,以防他的JSON太大(答案并不严格要求,但可能有用)。当压缩内容到达服务器时,标题为“content Encoding”:“GZIP”,服务器是否自动解压缩?@user902997-是和否。服务器必须读取整个消息,检查
内容编码
,然后解压缩消息。另一方面:Apache、Cherokee、Nginx(可能还有几乎所有其他的)将透明地完成这项工作,并为实际应用程序(比如PHP或Rails)提供一个已经解压缩的负载。