行。我想通了,这是servlet代码中的一个错误:
作为 HTTP 请求的结果,我们正在做这样的事情来编写序列化的 Java 对象:
DeflaterOutputStream dos = new DeflaterOutputStream(response.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(dos);
response.setContentType("application/x-java-serialized-object");
oos.writeObject(someObject);
似乎正在发生的事情是,DeflaterOutputStream
当ObjectOutputStream
它们仍然附加到响应对象的输出流时,它们会在三到四个请求之后被垃圾收集,这会导致流上发生一些事情,使 Apache 感到困惑并导致它重写标头.
我将上面的内容替换为:
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(byteStream);
oos = new ObjectOutputStream(dos);
response.setContentType("application/x-java-serialized-object");
oos.writeObject(someObject);
oos.flush();
dos.finish();
byteStream.writeTo(response.getOutputStream());
问题就消失了。
以下链接似乎描述了类似的问题: