请观看这个简短的视频,详细展示了我的问题: http://youtu.be/uAza4m3fxpY?hd=1
我有一个Glassfish 3.1服务器运行Netbeans Web项目。我有一个非常简单的.jsp文件,内容类型设置为"text/html",正文中有一大段虚拟文本。它看起来像这样:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gzip Test</title>
</head>
<body>
<h1>Gzip compsression test</h1>
<p>****LOTS OF DUMMY TEXT***</p>
</body>
</html>
在Glassfish管理中,我为HTTP侦听器强制启用了gzip压缩(如本指南中所述:http://www.vikasing.com/2010/01/enable-gzip-compression-on-glassfish-v3.html)
当在Firefox中加载页面并查看响应头时,我希望看到Content-Encoding: gzip
,但它不在那里。
为什么内容没有被压缩?
我发现这是Glassfish 3.1中的一个bug。它不使用,
字符分割accept-encoding
标头。例如,如果您将firefox的accept-encoding
标头设置为:gzip, deflate
,它将不会对内容进行gzip,因为逗号会把它搞砸,但是如果您将其设置为gzip
,那么它确实会被服务器进行gzip,因为没有逗号会阻塞。显然这已经在Glassfish 3.1.1中修复了,但我还没有测试过。详见:http://www.java.net/forum/topic/glassfish/glassfish/gzip-compression-glassfish-3-doesnt-work?force=899
感谢您的视频。我记得这是在Glassfish 3.0作为FishCAT的一部分发布之前提出的。
我认为你遇到的问题是因为你只设置了一个监听器'http-listener-1',你也需要设置'http-listener-2'。(也许你这样做了,但没有在视频中显示?)
Glassfish 3.1.2甚至4.0 Beta中也有同样的bug——看起来gzip压缩已经完全有bug了。即使firefox的accept-encoding被设置为单独的gzip,它也不能工作。你可能会使用压缩过滤器从谷歌,但它是相当困难的使用,因为它使用了一些依赖关系。
我在glassfish 3.1.2.2和gzip中也遇到了同样的问题。
1.0版本的HTTP请求响应没有被压缩。你必须在HTTP 1.1中发送请求才能从你的glassfish服务器获得gzip的响应。
另外,你必须在你的http请求中添加"Accept-Encoding: gzip"头。