【发布时间】:2013-02-26 03:44:30
【问题描述】:
我正在使用 Jetty 的代理 servlet 将请求从前端客户端路由到 Couch 数据库。除了代理之外,我还向 CouchDB 使用的传入请求注入了额外的细节。通过扩展HTTPServletRequestWrapper 修改HTTP 请求。当我覆盖getContentLength 方法并重新计算inputStream 的大小时,只有原始请求的大小内容被发送到CouchDB,并且由于输入的JSON 无效,Couch DB 发出一个错误请求(400 HTTP)代码。在 Jetty 记录器中,我看到了 contentWritten != contentLength 消息。一旦我完全删除 Content-Length 标头,Jetty 会按预期发送请求,将所有内容复制到代理请求。即使这种方法有效,我想知道是什么真正导致 Jetty 不发送修改后的请求内容,即使通过覆盖 ServletInputStream 的 getContentLength 方法设置了正确的内容长度也是如此。
我使用的是 Jetty 8.1.3 版本,所有请求都是 JSON 请求/响应。我还对ServletInputStream 类和read() 方法进行了子类化,所以我认为这没有任何问题。
【问题讨论】: