【发布时间】:2012-01-10 16:02:47
【问题描述】:
我正在尝试将一些 JSON 流转换为通过我编写的 GZIPFilter。到目前为止,当我告诉它时,我已经能够将过滤器调整为刷新,它可能会输出兼容的 gzip 浏览器数据。 我将输出重定向到一个文件并运行 gzip -cd -v test.gz ,它产生了预期的输出,然后是“文件意外结束”。
问题是浏览器仍然看到零输出(萤火虫),所以我想知道浏览器是否解释了对 gzip 流的部分刷新。
流主要包含 javascript 指令/对象,应在客户端接收和解析。 servlet 被调用一次并在整个会话期间保持打开状态,为客户端提供数据;连接未关闭,因此流继续运行,提供来自服务器的一种推送数据。
我的设置: WinXP 32位, GWT 2.4.0, 码头7.4.., GzipFilter(带有调整), 火狐 8 / Chrome 10
据我所知,根据 RFC 规范,内容仅在流结束后才被解码,所以我尝试做的事情可能是不可能的。不过,您可能有一些建议可以在主流浏览器上使用。
稍后编辑:
- 通过web.xml指定GzipFilter就可以了
- 浏览器接收到 Content-Encoding: gzip
- 字节正在写入 HTTPResponse 流
- 在编译和实时 GWT 模式下测试
- 使用字符集 iso-8859-1 测试或未指定
- content-type 是 text/html
- 没有通过 web.xml 应用的过滤器一切正常
【问题讨论】:
-
编写自己的 gzip 过滤器而不是使用 jetty 的原因是什么?
-
已修复。在允许我提交答案后,我会写下详细信息。我这样做是因为 GzipFilter 上的刷新在 outputStream 关闭之前不会注册,所以如果您尝试进行实时流式传输,这将不起作用。
-
最好在问题中包含您的动机,可能其他人也有同样的问题。