浏览器解析GZIP

[原文地址:http://snowolf.iteye.com/blog/643443]

昨天一篇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. importjava.io.ByteArrayOutputStream;
  5. importjava.io.IOException;
  6. importjava.io.OutputStream;
  7. importjava.util.zip.GZIPOutputStream;
  8. importjavax.servlet.ServletException;
  9. importjavax.servlet.http.HttpServlet;
  10. importjavax.servlet.http.HttpServletRequest;
  11. importjavax.servlet.http.HttpServletResponse;
  12. /**
  13. *GZip服务
  14. *
  15. *@author梁栋
  16. *@since1.0
  17. */
  18. publicclassGZipServletextendsHttpServlet{
  19. privatestaticfinallongserialVersionUID=-4811926975427533081L;
  20. privatestaticfinalStringENCODING="UTF-8";
  21. /**
  22. *压缩
  23. *
  24. *@paramdata
  25. *@return
  26. *@throwsException
  27. */
  28. privatebyte[]compress(byte[]data)throwsException{
  29. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  30. //压缩
  31. GZIPOutputStreamgos=newGZIPOutputStream(baos);
  32. gos.write(data,0,data.length);
  33. gos.finish();
  34. byte[]output=baos.toByteArray();
  35. baos.flush();
  36. baos.close();
  37. returnoutput;
  38. }
  39. /**
  40. *@paramrequest
  41. *@paramresponse
  42. *@throwsServletException
  43. *@throwsIOException
  44. */
  45. privatevoidexcute(HttpServletRequestrequest,HttpServletResponseresponse)
  46. throwsServletException,IOException{
  47. byte[]data="我是一个中国人!".getBytes(ENCODING);
  48. try{
  49. byte[]output=compress(data);
  50. //设置Content-Encoding,这是关键点!
  51. response.setHeader("Content-Encoding","gzip");
  52. //设置字符集
  53. response.setCharacterEncoding(ENCODING);
  54. //设定输出流中内容长度
  55. response.setContentLength(output.length);
  56. OutputStreamout=response.getOutputStream();
  57. out.write(output);
  58. out.flush();
  59. out.close();
  60. }catch(Exceptione){
  61. e.printStackTrace();
  62. }
  63. }
  64. /**
  65. *@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponse
  66. *response)
  67. */
  68. protectedvoiddoGet(HttpServletRequestrequest,
  69. HttpServletResponseresponse)throwsServletException,IOException{
  70. excute(request,response);
  71. }
  72. /**
  73. *@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponse
  74. *response)
  75. */
  76. protectedvoiddoPost(HttpServletRequestrequest,
  77. HttpServletResponseresponse)throwsServletException,IOException{
  78. excute(request,response);
  79. }
  80. }

其实,就这些内容!
当然,除了上述代码方式,针对于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也支持哦!
工程在我的附件里,请下载验证!

相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现

你可能感兴趣的:(浏览器解析GZIP)