【发布时间】:2011-04-11 06:27:37
【问题描述】:
我正在尝试将变量中的 GZip 内容输出到浏览器。首先,我让这变得非常简单,而不用担心不支持 gzip 的浏览器。此外,我通过研究可以在网上找到的几种方法将其组合在一起。其中一些来自可能正在阅读此问题的人。
<cfsavecontent variable="toGZIP"><html><head><title>Test</title></head><body><h1>Fear my test</h1></body></html></cfsavecontent>
<cfscript>
ioOutput = CreateObject("java","java.io.ByteArrayOutputStream");
gzOutput = CreateObject("java","java.util.zip.GZIPOutputStream");
ioOutput.init();
gzOutput.init(ioOutput);
gzOutput.write(toGZIP.getBytes("UTF-8"), 0, Len(toGZIP.getBytes()));
gzOutput.finish();
gzOutput.close();
ioOutput.flush();
ioOutput.close();
toOutput=ioOutput.toString("UTF-8");
</cfscript>
<cfcontent reset="yes" /><cfheader name="Content-Encoding" value="gzip"><cfheader name="Content-Length" value="#ArrayLen( toOuptut.getBytes() )#" ><cfoutput>#toOuptut#</cfoutput><cfabort />
但我在 Firefox(以及 chrome 和 Safari)中遇到错误
内容编码错误
您尝试查看的页面无法显示,因为它使用了无效或不受支持的压缩形式。
有人有什么想法吗?
操作系统:Mac OX-X Snow Leopard
CF:9-Dev
网络服务器:Apache
解决方案
<cfsavecontent variable="toGZIP"><html><head><title>Test</title></head><body><h1>Fear my test</h1></body></html></cfsavecontent>
<cfscript>
ioOutput = CreateObject("java","java.io.ByteArrayOutputStream");
gzOutput = CreateObject("java","java.util.zip.GZIPOutputStream");
ioOutput.init();
gzOutput.init(ioOutput);
gzOutput.write(toGZIP.getBytes(), 0, Len(toGZIP.getBytes()));
gzOutput.finish();
gzOutput.close();
ioOutput.flush();
ioOutput.close();
toOutput=ioOutput.toByteArray();
</cfscript>
<cfheader name="Content-Encoding" value="gzip"><cfheader name="Content-Length" value="#ArrayLen(toOutput)#" ><cfcontent reset="yes" variable="#toOutput#" /><cfabort />
【问题讨论】:
-
@tyler-- 你还在使用这个返回值吗?你是否从内部管理 gzip 进程中看到了好的结果?我也想自己尝试这样做。我无法让 IIS 7.0 对动态内容 (.cfm) 页面进行 gzip,尽管它声称可以。你有没有试过让 IIS 来做这件事?
-
我没有尝试让 IIS 对动态页面进行 gzip 压缩,但我认为我不想这样做,因为这会产生巨大的每个请求开销。管理压缩内容有效。我还没有机会彻底测试它的极限,但我希望很快。
标签: java coldfusion gzip