Jetty Proxy servlet不发送所有修改过的内容

时间:2013-02-26 03:44:31

标签: json servlets jetty

我正在使用Jetty的代理servlet将请求从前端客户端路由到Couch数据库。除了代理之外,我还要为CouchDB使用的传入请求注入其他详细信息。通过扩展HTTPServletRequestWrapper来修改HTTP请求。当我覆盖getContentLength方法并重新计算inputStream的大小时,只有原始请求的大小内容被发送到CouchDB,并且因为输入JSON无效,Couch DB会发出错误请求(400 HTTP)代码。在Jetty记录器中,我看到contentWritten != contentLength消息。一旦我完全删除了Content-Length标头,Jetty会按预期发送请求,将所有内容复制到代理请求中。即使这种方法有效,我想知道是什么导致Jetty不发送修改后的请求内容,即使通过覆盖getContentLength ServletInputStream方法设置了正确的内容长度。

我正在使用Jetty 8.1.3版本,所有请求都是JSON请求/响应。我还将ServletInputStream类和read()方法子类化,因此我认为没有任何问题。

1 个答案:

答案 0 :(得分:0)

这是最近在Jetty 7.6.10-SNAPSHOT和8.1.10-SNAPSHOT中修复的分块编码错误。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=401382

在Jetty-7中修复(然后合并到Jetty-8)

您可以使用oss.sonatype.org SNAPSHOTS repository中的Jetty 7.6.10-SNAPSHOT或8.1.10-SNAPSHOT。

7.6.10和8.1.10版本可能会在2013年3月的第一周发布。

是的,Jetty-7和Jetty-8是相同的代码库,并行开发,甚至并行发布,唯一的区别是每个支持的servlet规范。 (Jetty-7是Servlet 2.5,Jetty-8是Servlet 3.0)