1

我在一些 JUnit 测试中使用了一个简单的嵌入式 Jetty 实例。

我想强制 Jetty 返回一个没有 Content-Length 标头的 HTTP 响应(正如我们在野外的某些请求上看到的那样)。

我目前实现handle(...)AbstractHandler主要方式是捕获请求,然后,根据 URL 中的参数,Jetty 返回各种可能的响应,无论好坏。

response.setHeader("Content-Length", null);没用,它仍然根据我的正文数据返回有效的内容长度。

4

2 回答 2

2

创建一个javax.servlet.Filter ,将HttpServletResponse与您的实现包装起来,以防止设置Content-Length标头。

请务必在您的 HttpServletResponseWrapper 中实现以下方法。

每一个都可以是一段简单的代码,类似于...

@Override
public void addHeader(String name, String val)
{
    if ( "Content-Length".equalsIgnoreCase(name) ) 
    {
        // Ignore content-length from servlets
        return;
    }
    super.addHeader(name,val);
}
于 2013-02-07T16:09:03.097 回答
1

如果您将一些字节或字符写入响应,然后刷新,然后将一些其他字节或字符写入响应,它将不得不使用分块传输类型并且无法设置内容长度,因为它被迫在不知道实际写入的长度的情况下发送字节。

于 2013-02-07T11:01:17.670 回答