我正在使用 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()
方法进行了子类化,所以我认为这没有任何问题。