`
m635674608
  • 浏览: 5027718 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

浏览器解析GZIP

    博客分类:
  • java
 
阅读更多

昨天一篇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的流输出,关键点只有一行代码: 

Java代码  收藏代码
  1. response.setHeader("Content-Encoding""gzip");  


经过这项设置,浏览器就能够很好的作出响应! 
先看FireFox,如图: 
 
再看Opera,如图: 
 
浏览器在打开该页面时,就可解压获得并展示其内容! 
至于IE就惨了,愣是要求下载! 可能缺少什么设置!(注意后续服务器配置! 不是无解哦!) 
 你不信就这么简单?上代码! 

Java代码  收藏代码
  1. /** 
  2.  * 2010-4-14 
  3.  */  
  4. import java.io.ByteArrayOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.OutputStream;  
  7. import java.util.zip.GZIPOutputStream;  
  8.   
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. /** 
  15.  * GZip服务 
  16.  *  
  17.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a> 
  18.  * @since 1.0 
  19.  */  
  20. public class GZipServlet extends HttpServlet {  
  21.   
  22.     private static final long serialVersionUID = -4811926975427533081L;  
  23.     private static final String ENCODING = "UTF-8";  
  24.   
  25.     /** 
  26.      * 压缩 
  27.      *  
  28.      * @param data 
  29.      * @return 
  30.      * @throws Exception 
  31.      */  
  32.     private byte[] compress(byte[] data) throws Exception {  
  33.   
  34.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  35.   
  36.         // 压缩  
  37.         GZIPOutputStream gos = new GZIPOutputStream(baos);  
  38.   
  39.         gos.write(data, 0, data.length);  
  40.   
  41.         gos.finish();  
  42.   
  43.         byte[] output = baos.toByteArray();  
  44.   
  45.         baos.flush();  
  46.         baos.close();  
  47.   
  48.         return output;  
  49.     }  
  50.   
  51.     /** 
  52.      * @param request 
  53.      * @param response 
  54.      * @throws ServletException 
  55.      * @throws IOException 
  56.      */  
  57.     private void excute(HttpServletRequest request, HttpServletResponse response)  
  58.             throws ServletException, IOException {  
  59.   
  60.         byte[] data = "我是一个中国人!".getBytes(ENCODING);  
  61.   
  62.         try {  
  63.             byte[] output = compress(data);  
  64.   
  65.             // 设置Content-Encoding,这是关键点!  
  66.             response.setHeader("Content-Encoding""gzip");  
  67.             // 设置字符集  
  68.             response.setCharacterEncoding(ENCODING);  
  69.             // 设定输出流中内容长度  
  70.             response.setContentLength(output.length);  
  71.   
  72.             OutputStream out = response.getOutputStream();  
  73.             out.write(output);  
  74.             out.flush();  
  75.             out.close();  
  76.         } catch (Exception e) {  
  77.             e.printStackTrace();  
  78.         }  
  79.     }  
  80.   
  81.     /** 
  82.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
  83.      *      response) 
  84.      */  
  85.     protected void doGet(HttpServletRequest request,  
  86.             HttpServletResponse response) throws ServletException, IOException {  
  87.         excute(request, response);  
  88.     }  
  89.   
  90.     /** 
  91.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
  92.      *      response) 
  93.      */  
  94.     protected void doPost(HttpServletRequest request,  
  95.             HttpServletResponse response) throws ServletException, IOException {  
  96.         excute(request, response);  
  97.     }  
  98.   
  99. }  


其实,就这些内容! 

当然,除了上述代码方式,针对于tomcat可以通过修改配置获得支持! 

Xml代码  收藏代码
  1. <Connector   
  2.               port="8080"   
  3.               protocol="HTTP/1.1"  
  4.               connectionTimeout="20000"  
  5.               redirectPort="443"   
  6.               URIEncoding="UTF-8"  
  7.               compression="on"     
  8.               noCompressionUserAgents="gozilla, traviata"     
  9.               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"   
  10. />    


说说配置细节: 
compression="on"   开启压缩支持 
noCompressionUserAgents="gozilla, traviata"   不压缩的内容 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 压缩的类型 

至于代码,你无需写一行代码!轻松获得服务器访问加速! 并且IE也支持哦! 

借网友经验,如下实现,轻松获得IE支持: 

Java代码  收藏代码
  1. 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相关——浏览器解析

    本篇文章将深入探讨Java中的GZIP相关技术,以及如何与浏览器交互。 首先,GZIP是一种基于DEFLATE算法的压缩格式,它被广泛应用于HTTP协议的压缩传输。在Java中,我们可以使用`java.util.zip.GZIPOutputStream`和`...

    Nginx服务器中的GZip配置参数详解

    浏览器进行解压并解析,现在大多数的浏览器都已经支持解析gzip过的页面 gzip使用环境:http,server,location,if(x),一般我把它定义在nginx.conf的http{…..}之间 gzip on;  开启gzip off关闭 gzip_min_length 1k; ...

    手机浏览器源码(j2me)

    2. HTML解析:收到服务器响应后,浏览器解析HTML,构建DOM树。 3. CSS样式应用:解析CSS规则,根据设备特性调整布局和样式。 4. 图像处理:处理网页中的图片,可能需要考虑缩放和下载优化。 5. JavaScript支持:部分...

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    - **浏览器端**:前端可以通过JavaScript实现的GZIP库(如`pako`)处理从服务器获取的GZIP压缩数据,提高加载速度。 - **本地存储优化**:在存储空间有限的情况下,使用JavaScript进行GZIP压缩可以减小本地存储的...

    IIS上启用Gzip压缩(HTTP压缩)

    ### IIS上启用Gzip压缩(HTTP压缩):深入解析与实践 #### 摘要与前言 在当今高速发展的互联网环境中,网站响应速度成为用户体验的关键因素之一。启用Gzip压缩(HTTP压缩)能够显著减少网页在网络上的传输大小,进而...

    安卓浏览器源码 功能齐全

    12. **广告拦截**:一些浏览器可能会集成广告拦截功能,这需要解析网页结构并过滤广告请求。 13. **隐私模式**:提供隐私浏览模式,不记录浏览历史和Cookie。 14. **夜间模式**:为了适应不同环境,浏览器通常会有...

    浏览器的加载与页面性能优化

    DNS解析延迟是网络请求中常见的瓶颈之一,现代浏览器如Chrome通过DNS预解析技术,能够缓存或提前解析DNS记录,显著减少用户等待时间。例如,在浏览Google页面时,Chrome会自动预解析搜索结果中的链接,这一过程不仅...

    Nginx服务器中使用gzip压缩的相关配置解析

    主要在nginx服务端将页面进行压缩,然后在浏览器端进行解压和解析, 目前大多数流行的浏览器都迟滞gzip格式的压缩,所以不用担心。 默认情况下,Nginx的gzip压缩是关闭的,同时,Nginx默认只对text/html进行压缩 ...

    Gzip文件压缩 实例

    本篇将深入探讨Gzip文件压缩的相关知识点,结合提供的标题“Gzip文件压缩实例”以及标签“源码”和“工具”,我们将分析Gzip的原理、使用方法、源码解析以及相关工具的运用。 1. **Gzip原理** Gzip基于DEFLATE算法...

    pako.js js Gzip 解压

    当后端服务器返回Gzip压缩的JSON数据时,前端需要有能力解压这些数据才能正确解析和使用。这就是pako.js发挥作用的地方。pako.js提供了方便的API来处理Gzip压缩的数据: 1. `pako.inflate()`:这是解压缩函数,接受...

    firefox里gzip的c++源代码

    标题中的“firefox里gzip的c++源代码”指的是Firefox浏览器中使用C++实现的gzip压缩相关的源代码。Gzip是一种广泛使用的数据压缩算法,它基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv)编码和霍夫曼编码。在Fire...

    ry-http.rar_C++ HTTP解析_c语言 http_http 解析 C语言_http解析_解析 http

    3. 处理编码:HTTP允许使用多种编码方式,如gzip或deflate,解析器需要能识别并解码这些编码的响应体。 4. 错误处理:在解析过程中,如果遇到格式错误或无法理解的数据,解析器应当能够适当地报告错误,以便于调试...

    http.rar_C http_gzip_gzip http_http gzip_socket gz

    在客户端,可能涉及解析HTTP响应头来检测Content-Encoding字段,并使用相应的解压方法(如gzip库)解压缩接收到的数据。 socket__gz标签提到了socket编程和gzip的结合。在TCP/IP编程中,socket是操作系统提供的接口...

    关于Gzip压缩js文件提高网站运行速度

    3. **更快的首屏加载**:浏览器可以更快地下载并解析压缩的JavaScript文件,有助于加速首屏内容的显示,提高用户的第一印象。 **如何启用Gzip** 1. **服务器配置**:对于Apache服务器,可以在`.htaccess`文件中添加...

    谷歌浏览器插件-json格式解析

    它提供了一站式的解决方案,帮助用户快速地在浏览器环境中解析、解码、压缩、格式化和排序JSON数据,极大地提高了工作效率。用户只需要在谷歌浏览器中安装这个插件,无需额外的桌面工具或在线服务,就可以方便地处理...

    详解Nginx服务器的配置中开启文件Gzip压缩的方法

    浏览器那里不需要我们担心,因为目前的巨大多数浏览器都支持解析gzip 过的页面。 Nginx的压缩输出有一组gzip压缩指令来实现。相关指令位于http{….}两个大括号之间。 下面大致讲一下配置开启gzip压缩的方法: 1、Vim...

    网络游戏-微浏览器处理网络数据的方法、微浏览器及其服务器.zip

    同时,微浏览器可能使用高效的压缩算法,如Brotli或Gzip,来减小数据体积,加快传输。对于JSON或其他数据格式,它可能会有专门的解析器,快速转换为游戏可使用的结构。 2. 微浏览器设计: 微浏览器设计的关键在于...

    加速浏览器.....

    开发者可以通过`&lt;link rel="dns-prefetch"&gt;`标签来提示浏览器进行DNS预解析。 3. **HTTP/2多路复用**:相比于HTTP/1.1,HTTP/2协议允许在一个TCP连接上同时处理多个请求,避免了因多个TCP连接产生的延迟,提高了...

    抓取浏览器访问头信息的web应用

    4. **Accept-Encoding**: 告诉服务器客户端支持的压缩算法,如 gzip、deflate 等,用于提高数据传输效率。 5. **Referer**: 提供了发出请求的页面URL,有助于追踪用户来源。 6. **Cookie**: 用于存储用户状态和...

Global site tag (gtag.js) - Google Analytics