- 一般用例**
假设一个客户端正在上传大量的JSON。Content-Type应该保持application/json
,因为它描述了实际的数据。Accept-Encoding和Transfer-Encoding似乎是为了告诉服务器应该如何格式化响应。看起来 * responses * 显式地使用Content-Encoding头来实现这个目的,但它不是一个有效的 * request * 头。
我错过了什么吗?有人找到了一个优雅的解决方案吗?
- 特定使用情形**
我的用例是我有一个生成大量JSON的移动应用程序(在某些情况下还有一些二进制数据,但程度较小),压缩请求节省了大量带宽。我使用Tomcat作为我的Servlet容器。我使用Spring作为它的MVC注解,主要是为了将一些JEE的东西抽象成一个更干净的,我还使用Jackson进行自动序列化(反序列化)。
我也使用nginx,但我不确定是否要在那里进行解压缩。nginx节点只是平衡请求,然后通过数据中心分发。保持压缩直到它真正到达要处理它的节点是一样好的。
先谢谢你,
约翰
编辑:
我和@DaSourcerer之间的讨论对那些在写这篇文章时对事情的状态感到好奇的人真的很有帮助。
我最终实现了自己的解决方案。注意,这指定了分支"ohmage-3. 0",但它很快就会合并到master分支中。您可能想要检查那里,看看我是否做了任何更新/修复。
https://github.com/ohmage/server/blob/ohmage-3.0/src/org/ohmage/servlet/filter/DecompressionFilter.java
3条答案
按热度按时间rkkpypqq1#
因为原来的代码是不可用了。如果有人来这里需要它。我用“内容编码:gzip”来标识是否需要解压缩的过滤器。
这是密码。
简单ServletInputStream Package 类
解压缩码流
t9aqgxwy2#
[Content-Encoding]似乎不是有效的请求标头。
事实并非如此。根据RFC 2616第14.11节,
Content-Encoding
是一个 * 实体 * 报头,这意味着它可以应用于http响应和请求的实体。通过多部分MIME消息的强大功能,甚至可以压缩请求(或响应)的选定 * 部分 *。然而,Web服务器对压缩请求主体的支持相当少,Apache通过
mod_deflate
模块在一定程度上支持它,我不太清楚nginx can handle compressed requests是否支持压缩请求主体。0wi1tuuw3#
发送时添加到标题:
客户代码:
@JulianReschke指出,可能会出现这样的情况:
因此扩展服务器代码将为:
我假设nginx被用作负载平衡器或代理,因此您需要设置tomcat来执行解压缩。
将以下属性添加到Tomcat上server.xml中的连接器,
在tomcat中接受gzip请求则是另一回事,你必须在你的servlet前放置一个过滤器来启动请求解压缩,你可以找到更多关于here的信息。