昨天一篇GZIP相关实现引起大家的广泛关注,为一位朋友验证一下浏览器对gzip的支持情况,才有此文!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
GZIP本身就是一种网络流压缩算法,而且应用相当广泛。如果网络访问过程中,其数据流较大,势必降低网络访问效率,此时就需要考虑使用压缩!当然,在浏览器与服务器的交互中,要考虑浏览器是否支持这些算法,以及服务器运行压缩所带来的负载。如果你关注浏览器上传的“Accept-Encoding”属性,你就能看明白这一点。
GZIP如何压缩,我这里就不废话了,不清楚的朋友请关注(Java压缩技术(四) GZIP——Java原生实现)
至于如何使得服务器支持gzip的流输出,关键点只有一行代码:
- response.setHeader("Content-Encoding", "gzip");
经过这项设置,浏览器就能够很好的作出响应!
先看FireFox,如图:
再看Opera,如图:
浏览器在打开该页面时,就可解压获得并展示其内容!
至于IE就惨了,愣是要求下载! 可能缺少什么设置!(注意后续服务器配置! 不是无解哦!)
你不信就这么简单?上代码!
- /**
- * 2010-4-14
- */
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.zip.GZIPOutputStream;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * GZip服务
- *
- * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
- * @since 1.0
- */
- public class GZipServlet extends HttpServlet {
- private static final long serialVersionUID = -4811926975427533081L;
- private static final String ENCODING = "UTF-8";
- /**
- * 压缩
- *
- * @param data
- * @return
- * @throws Exception
- */
- private byte[] compress(byte[] data) throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // 压缩
- GZIPOutputStream gos = new GZIPOutputStream(baos);
- gos.write(data, 0, data.length);
- gos.finish();
- byte[] output = baos.toByteArray();
- baos.flush();
- baos.close();
- return output;
- }
- /**
- * @param request
- * @param response
- * @throws ServletException
- * @throws IOException
- */
- private void excute(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- byte[] data = "我是一个中国人!".getBytes(ENCODING);
- try {
- byte[] output = compress(data);
- // 设置Content-Encoding,这是关键点!
- response.setHeader("Content-Encoding", "gzip");
- // 设置字符集
- response.setCharacterEncoding(ENCODING);
- // 设定输出流中内容长度
- response.setContentLength(output.length);
- OutputStream out = response.getOutputStream();
- out.write(output);
- out.flush();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
- * response)
- */
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- excute(request, response);
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
- * response)
- */
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- excute(request, response);
- }
- }
其实,就这些内容!
当然,除了上述代码方式,针对于tomcat可以通过修改配置获得支持!
- <Connector
- port="8080"
- protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="443"
- URIEncoding="UTF-8"
- compression="on"
- noCompressionUserAgents="gozilla, traviata"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"
- />
说说配置细节:
compression="on" 开启压缩支持
noCompressionUserAgents="gozilla, traviata" 不压缩的内容
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 压缩的类型
至于代码,你无需写一行代码!轻松获得服务器访问加速! 并且IE也支持哦!
借网友经验,如下实现,轻松获得IE支持:
- response.setContentType("text/plain;charset=utf-8");
工程在我的附件里,请下载验证!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
http://snowolf.iteye.com/blog/643443
相关推荐
本篇文章将深入探讨Java中的GZIP相关技术,以及如何与浏览器交互。 首先,GZIP是一种基于DEFLATE算法的压缩格式,它被广泛应用于HTTP协议的压缩传输。在Java中,我们可以使用`java.util.zip.GZIPOutputStream`和`...
浏览器进行解压并解析,现在大多数的浏览器都已经支持解析gzip过的页面 gzip使用环境:http,server,location,if(x),一般我把它定义在nginx.conf的http{…..}之间 gzip on; 开启gzip off关闭 gzip_min_length 1k; ...
2. HTML解析:收到服务器响应后,浏览器解析HTML,构建DOM树。 3. CSS样式应用:解析CSS规则,根据设备特性调整布局和样式。 4. 图像处理:处理网页中的图片,可能需要考虑缩放和下载优化。 5. JavaScript支持:部分...
- **浏览器端**:前端可以通过JavaScript实现的GZIP库(如`pako`)处理从服务器获取的GZIP压缩数据,提高加载速度。 - **本地存储优化**:在存储空间有限的情况下,使用JavaScript进行GZIP压缩可以减小本地存储的...
### IIS上启用Gzip压缩(HTTP压缩):深入解析与实践 #### 摘要与前言 在当今高速发展的互联网环境中,网站响应速度成为用户体验的关键因素之一。启用Gzip压缩(HTTP压缩)能够显著减少网页在网络上的传输大小,进而...
12. **广告拦截**:一些浏览器可能会集成广告拦截功能,这需要解析网页结构并过滤广告请求。 13. **隐私模式**:提供隐私浏览模式,不记录浏览历史和Cookie。 14. **夜间模式**:为了适应不同环境,浏览器通常会有...
DNS解析延迟是网络请求中常见的瓶颈之一,现代浏览器如Chrome通过DNS预解析技术,能够缓存或提前解析DNS记录,显著减少用户等待时间。例如,在浏览Google页面时,Chrome会自动预解析搜索结果中的链接,这一过程不仅...
主要在nginx服务端将页面进行压缩,然后在浏览器端进行解压和解析, 目前大多数流行的浏览器都迟滞gzip格式的压缩,所以不用担心。 默认情况下,Nginx的gzip压缩是关闭的,同时,Nginx默认只对text/html进行压缩 ...
本篇将深入探讨Gzip文件压缩的相关知识点,结合提供的标题“Gzip文件压缩实例”以及标签“源码”和“工具”,我们将分析Gzip的原理、使用方法、源码解析以及相关工具的运用。 1. **Gzip原理** Gzip基于DEFLATE算法...
当后端服务器返回Gzip压缩的JSON数据时,前端需要有能力解压这些数据才能正确解析和使用。这就是pako.js发挥作用的地方。pako.js提供了方便的API来处理Gzip压缩的数据: 1. `pako.inflate()`:这是解压缩函数,接受...
标题中的“firefox里gzip的c++源代码”指的是Firefox浏览器中使用C++实现的gzip压缩相关的源代码。Gzip是一种广泛使用的数据压缩算法,它基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv)编码和霍夫曼编码。在Fire...
3. 处理编码:HTTP允许使用多种编码方式,如gzip或deflate,解析器需要能识别并解码这些编码的响应体。 4. 错误处理:在解析过程中,如果遇到格式错误或无法理解的数据,解析器应当能够适当地报告错误,以便于调试...
在客户端,可能涉及解析HTTP响应头来检测Content-Encoding字段,并使用相应的解压方法(如gzip库)解压缩接收到的数据。 socket__gz标签提到了socket编程和gzip的结合。在TCP/IP编程中,socket是操作系统提供的接口...
3. **更快的首屏加载**:浏览器可以更快地下载并解析压缩的JavaScript文件,有助于加速首屏内容的显示,提高用户的第一印象。 **如何启用Gzip** 1. **服务器配置**:对于Apache服务器,可以在`.htaccess`文件中添加...
它提供了一站式的解决方案,帮助用户快速地在浏览器环境中解析、解码、压缩、格式化和排序JSON数据,极大地提高了工作效率。用户只需要在谷歌浏览器中安装这个插件,无需额外的桌面工具或在线服务,就可以方便地处理...
浏览器那里不需要我们担心,因为目前的巨大多数浏览器都支持解析gzip 过的页面。 Nginx的压缩输出有一组gzip压缩指令来实现。相关指令位于http{….}两个大括号之间。 下面大致讲一下配置开启gzip压缩的方法: 1、Vim...
同时,微浏览器可能使用高效的压缩算法,如Brotli或Gzip,来减小数据体积,加快传输。对于JSON或其他数据格式,它可能会有专门的解析器,快速转换为游戏可使用的结构。 2. 微浏览器设计: 微浏览器设计的关键在于...
开发者可以通过`<link rel="dns-prefetch">`标签来提示浏览器进行DNS预解析。 3. **HTTP/2多路复用**:相比于HTTP/1.1,HTTP/2协议允许在一个TCP连接上同时处理多个请求,避免了因多个TCP连接产生的延迟,提高了...
4. **Accept-Encoding**: 告诉服务器客户端支持的压缩算法,如 gzip、deflate 等,用于提高数据传输效率。 5. **Referer**: 提供了发出请求的页面URL,有助于追踪用户来源。 6. **Cookie**: 用于存储用户状态和...