热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Web优化】Yslow优化法则(四)启用Gzip压缩

Yslow的第4个经验法则指出:启用gzip压缩功能,可以减少HTTP传输的数据和时间,从而减少客户端请求的响应时间。本篇是Yslow法则的第四个,主要包括三个方面的内容:1.

Yslow的第4个经验法则指出:启用gzip压缩功能,可以减少HTTP传输的数据和时间,从而减少客户端请求的响应时间。

本篇是Yslow法则的第四个,主要包括三个方面的内容:

1.      什么是gzip

2.      gzip与HTTP

3.      nginx启用gzip


什么是gzip?


Gzip最早出现在Unix系统中,是GNU的文件压缩工具。我们今天所说的Gzip,并不是特指Linux/Unix中的压缩工具,而是指HTTP中普遍使用的内容编码格式(内容编码,这里指的是内容的压缩)。由于Gzip具有较好的压缩性能, 且几乎所有的主流浏览器都支持Gzip的压缩方式,使得Gzip几乎成为现代web服务器的标配。通过对HTTP响应实体的压缩,Gzip可以:

1.      减少网络传输的时间和数据量,从而降低服务器的流量。

2.      由于降低了传输时间,使得web页面可以更快的渲染。

3.      以上两者,不仅减少了服务器端的压力和成本,而且改善了用户体验。

以本博客http://blog.csdn.net/ohmygirl为例,firebug抓取请求可以看出,csdn站点启用了Gzip的压缩方式:


Gzip与HTTP


由于Gzip是需要客户端和服务器共同遵守的编码规则,这意味着,如果客户端不支持Gzip或者服务器端不支持Gzip的压缩方式,一定是不能启用Gzip压缩的,否则便会出现客户端接收到压缩后的内容主体却无法解码的情况。为了避免这种不必要的情况,通常需要编码协商。

1.       Accept-Encoding请求首部。

为了避免服务器使用客户端不支持的编码压缩方式对响应主体进行编码,客户端在发送请求的时候,需要把自己能够支持的内容编码方式列表放在请求的Accept-Encoding首部中发送出去,服务器便可以从中选择一种合适的编码压缩方式。如果HTTP请求中没有包含Accept-Encoding首部,服务器可以假定客户端可以接受任何的编码压缩方式(类似于Accept-Encoding:*)。标准的内容编码压缩方式包括Gzip、compress、deflate、identity等,其中Gzip, compress , deflate都是无损压缩算法,而Gzip通常是压缩效率最高的,也是最普遍支持的压缩算法。同样以本博客为例,下图展示了客户端在请求时发送的Accept-Encoding内容编码协商首部:


图中的请求首部表明,客户端支持的内容编码方式是deflate和Gzip。

2.       Content-Encoding响应首部

与Accept-Encoding请求首部相对应,Content-Encoding响应首部用于表明服务器实际选择的内容编码方式。在上面的例子中,CSDN站点便是使用Gzip的压缩方式。

另外,如果响应首部中同时出现了Content-length头部,这时的Content-length指的是内容编码之后的长度。

3.        内容编码过程。

由以上两点可以看出,启用了Gzip内容编码压缩的过程如下:

a.      客户端请求,其中包含Accept-Encoding首部表明客户端支持的编码方式。

b.      Web服务器生成原始的响应报文,其中包含未编码的Content-Type和Content-length首部。

c.      Gzip编码服务器(通常就是web服务器)创建Gzip压缩后的报文。压缩后的报文有同样的Content-type首部,但是Content-Length首部不同。

d.      客户端接收Gzip编码后的报文,采用同样的算法解码,获取原始的报文。

整个过程如下图所示:


Nginx启用Gzip


目前比较常用的HTTP server包括Apache, IIS和Nginx本文以Nginx的配置为例,说明如何在web服务器中启用Gzip压缩。关于Apache和IIS的启用方式,可以参考百度百科中提供的方法:链接接地址是:

http://baike.baidu.com/link?url=2S3tFqPdyGQ_loxtfIqfrhD0Yq1G8pvhTBuG9EZS_iohE_0Dpe1sFOm6W6LMqOPu#3这里不再赘述。

         Nginx.Conf配置文件中,http段主要控制Nginx服务器的HTTP相关配置。配置示例如下:

gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_comp_level 9;
gzip_types text/plain text/css application/jsonapplication/x-Javascript;
gzip_http_version 1.0;

对配置的各项的解释:

1.      Gzip on 开启Nginx的Gzip压缩。显然,只有开启了Gzip压缩,Nginx服务器才会对满足条件的响应启用Gzip压缩(废话!)。

2.      gzip_disable "MSIE[1-6]\."  由于IE6及以下版本对Gzip的支持不够完善,且可能造成浏览器的假死,因而通常禁用IE6以下的Gzip压缩功能。

3.      gzip_min_length  1000; 启用Gzip压缩的最小响应主体大小,单位是B, 这里是1KB. 如果你启用了Gzip却发现有的响应并没有Content-encoding: gzip首部,不要着急,很可能是文档本身比较小,没有压缩的必要(毕竟Gzip压缩和解压缩也是需要时间的)。

4.      gzip buffers  4 8k。指定缓存区的大小和数量。一个缓存区的大小通常为分页的大小。关于gzip buffers的更多知识,会在更深入的学习之后补充。

5.      gzip_comp_level 9; 指定Gzip压缩的等级,数值1-9。数值越大,压缩率越大,相应的需要的压缩处理时间也较长。应该根据实际的情况设置适当的压缩等级,太小压缩比低,太大则处理时间较长。

6.      gzip_types 指定启用Gzip压缩的MIME类型。默认情况下,text/html的响应类型一定会被压缩的。

7.      gzip_http_version 1.0。只有HTTP/1.0的请求,才会启用Gzip压缩,而HTTP/1.1的请求会被过滤。


So. Gzip功能是配置好了,检查一下是否生效:有两种基本方式:

1.      抓包工具,如firebug或者fiddler。发送的请求头中含有Accept-Encoding且响应中有Content-Encoding:gzip的首部。

2.      Curl命令行。Curl –I –H“Accept-Encoding:gzip;” “http://xxxxx”

-I参数让curl的返回结果只包含响应头部。同样,如果有Content-Encoding:gzip头部。那么你的配置就成功了。

效果怎样呢?

以一个js(大小为17KB)为例,经过Gzip压缩之后的响应大小为4.4KB,也就是压缩率= 4.4/17 * 100% = 25.8%. 这已经大大减少了网络传输的流量。

参考文献:

1.      http://www.open-open.com/lib/view/open1339292864521.html

2.      http://www.veryhuo.com/a/view/51706.html

3.      http://www.cnblogs.com/zfying/archive/2012/07/07/2580876.html

4.      http://www.ithov.com/linux/109584.shtml

 


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 通过以下步骤可以确定SharePoint网站集对应的W3WP进程及其运行状态:首先,打开命令提示符(CMD),然后输入 `iisapp` 命令,该命令将列出当前IIS中所有Web应用程序及其对应的w3wp.exe进程。此外,还可以使用任务管理器或PowerShell脚本来进一步检查这些进程的详细信息和运行状态,以确保网站集的正常运行。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 如何设置域名默认301重定向至www前缀
    在进行域名默认301重定向至www前缀的操作前,确保你已经拥有一个有效的域名,并且该域名已正确解析到外部主机地址,能够正常访问网站。本文主要针对IIS 7及以上版本的用户,IIS 7之前的版本不适用。我们将详细介绍如何通过IIS管理器配置301重定向,确保所有请求都能自动跳转到带有www前缀的URL,从而提升网站的SEO效果和用户体验。 ... [详细]
author-avatar
uai_128366833952
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有