1

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

我使用的是 Jetty 8.1.3 版本,所有请求都是 JSON 请求/响应。我还对ServletInputStream类和read()方法进行了子类化,所以我认为这没有任何问题。

4

1 回答 1

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 存储库的 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)

于 2013-02-26T04:07:36.747 回答