如何使用HTTP压缩优化服务器

鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的。其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能。数据压缩本身并不新鲜。但是,这种方法的特色在于对服务器到客户端之间的数据压缩是实时的,很少有用户知道这种方法。
HTTP压缩技术,无需客户端配置,它是一种最为简便的提高网络速度的方法。本文旨在讨论这种技术是如何工作的?其优点是什么以及如何实现在ApacheIIS上的数据压缩?
为何要压缩?
绝大多数的用户对压缩技术的了解来自对下载的一大组文件进行压缩、解压和打开等体验,这种压缩技术也可以用于向客户端传输的数据的压缩方面,因为这是一种主动的处理过程,服务器可以减少网页发送的大小,从而降低用户下载的时间,最大效率地利用宽带。
通过压缩技术,你可以将HTML文件压缩到原来大小的一半。这样,把更多的时间留给了客户端,去下载更多带宽的工作量。这种压缩,是在不影响网站实际工作流程、网页设计和服务内务等情况下实现的,唯一改变的是信息传输的方式。
不过,这种方法也有他的限制。
适合压缩的文件类型
当然,并非所有的文件需要压缩。比如,已经压缩的文件诸如JPEG、GIF、PNG、电影和打包内容等不需要HTTP压缩过滤技术。对它们再次压缩将无法得到显著减小文件体积的效果。
同时,网站还有大量的文本内容诸如HTML、XML、CSS和RSS等,他们都需要进行压缩。压缩的程序取决于文件的类型,绝大多数的HTML文本文件压缩率为50%。而用了很格式的网页(例如用了大量的表格来规划页面)可以进一步压缩,最大可压缩到原有大小的三分之一。
幸运的是,大多数HTTP服务器都提供了选择对哪一类型文件进行压缩的能力,服务器就可以选择文件类型进行压缩,那些不适合压缩的文件会排除在外。
实现HTTP压缩
HTTP压缩,是服务器的功能,而浏览器也会自动地支持而无需对客户端进行另外的配置。要想启用服务器压缩,只需要简单的对服务器进行一些设置。
要启用HTTP压缩的设置, Apache、IIS6和IIS的更老版本的设置方法都不同。
Apache
Apache 2.0包含了mod_deflate模块,这个模块对服务器内容进行动态的Gzip压缩。这种压缩可以是对所有内容无差别的——对IE浏览器,所有的内容都是经过压缩的,或者是选择性的,仅压缩指定的MIME类型,MIME类型由HTTP应答头确定,这个HTTP头可以是由Apache自动生成或是由动态程序(例如CGI)的输出。
要实现内容的无差别压缩,可以在Apache配置文件中对整个站点或需要启用压缩的目录加入SetOutputFilter指示如下:
SetOutputFilter Deflate
要启用对特定MIME类型内容的压缩,可以在配置文件中使用AddOutputFilterByType指示,例如下面这样:
AddOutputFilterByType DEFLATE text/html
注意,所有被指定MIME类型输出都将被压缩,无论它是来自于一个静态的磁盘文件还是一个动态程序(如CGI或mod_perl)输出。
有些老的浏览器无法正确的处理压缩过的内容,这时可以用BrowserMatch指示来过滤掉特定的浏览器类型,你可以查看mod_deflate 帮助手册获取更详细的资料。
IIS 6
IIS 6包括了一个简便易用的内置压缩组件。由于是内置式的,它不是通过IISAPI接口,它的压缩速度极快,是IIS 5和更早版本IIS的第三方HTTP压缩组件的最佳替代品。压缩系统可以设置对动态(例如脚本输出仙鹤)和静态内容进行压缩,它也可以在目录中缓冲压缩信息,这样当再次访问以前访问过的内容时,无需再次进行压缩从而改善了动态和静态内容的访问性能。
为了实现在IIS 6中的HTTP压缩技术,用户打开网站的属性页面,编辑全局属性,切换到“服务”标签,在HTTP压缩选项中配置选择项。
缓冲的文件存储于临时目录中,默认的设置是IIS中的元数据目录的子目录下。该目录必须位于NTFS格式分区上,你可以设定缓冲区的大小或是设定为无限,我们建议最大可设置为该分区的两倍(这些数据还包括了动态脚本的输出内容)。
IIS5和IIS的更老版本
IIS5和IIS的更老版本没有内置压缩功能,但是,它们支持ISAPI过滤器。我们建议用户使用Port80的
ZipEnable。虽然也存在其它类似功能的产品,但它是少数微软特别推荐的产品之一,而且它与IIS 6兼容,通过配置IIS 6的设置,它可以将IIS6的HTTP压缩功能进一步在目录级别上进行进行控制。
服务器的性能表现
显然,对传输数据进行压缩需要一定的CPU时间,这种压缩过程可能会对网站造成不良的影响,因为选定的每个目标在发送前都必须进行压缩。这里IIS6领先了Apache一小步,它建立了一个缓冲区域,放压缩文件放在里面,这样对于那些被频繁访问的内容可以大大减少CPU压缩处理时间。但这不能完全避免实时在线压缩的需要,大量的动态的内容还是必须被在线压缩,而这些动态内容所需的缓存空间可能极其巨大。
如果可以节省50%的带宽而只牺牲网站不到10%的CPU时间。这样做是完全值得的,特别是对于那些按网络流量计费的企业来说更为划算。
浏览器的支持和动态内容
如今,绝大多数的现代浏览器支持压缩技术,但是,具体的压缩方式取决于浏览器。不过你无需对此担心,因为只有浏览器指示支持一种压缩方式时,Web服务器才会发送压缩内容。尽管如果,了解一下这种处理机制和不同浏览器支持的压缩类型仅是一件有意义的事。
浏览器在要求一个网址时,会把支持的压缩格式通过Accept-Encoding的HTTP头提交给服务器,Apache或其它Web服务器则从HTTP_ACCEPT_ENCODING环境变量读取这个信息,这个过程无需你人为干预,Apache在浏览器支持压缩的情况下会自动对发送的内容进行合适的编码。
下表列出了常见的浏览器和它们支持的编码类型。
浏览器
支持的编码
Firefox 1.0, Mozilla 1.x, Camino
gzip, deflate
OmniWeb 5.x
bzip2, gzip, deflate
Safari
gzip, deflate
Internet Explorer
gzip, deflate
“Identity”这个词有时会出现在浏览器支持的编码列表中,这个词的意思就是支持非压缩内容。所有的浏览器都会默认对它提供支持,不过有些没有特别列出。
如上所示,现代的浏览器都支持压缩技术。当发出URL请求时浏览器会自动提供支持的编码。如果你需要使用HTTP压缩技术,只需要对服务器端进行设置就足够了。
总结
使用HTTP压缩是一种简单易行的提高服务器性能和减少带宽消耗的方法,它也有潜在的不足,那就是增大了CPU的开销。但是相对于它带来的好处而言,这个开销是物有所值的。
而且,如果你发现它并没有带来想象中的服务器性能提升,要禁用它也非常简单。它没有改变过你的站点内容,改变的仅是数据传输的方式而已。


附注:
在运行微软Internet Information Services (IIS) 6.0的Windows Server 2003系统上,使用GNU zip(Gzip)进行压缩的静态文件可能会不可用或包含有来自Web服务器中其他文件的内容。如果出现这种情况,返回客户端的页面将会生成出错,而且还可能造成访问冲突的现象。
上述问题可能影响到“Outlook网络访问(OWA)”用户,并可能导致代码错误信息返回到OWA页面上。

微软已针对上述问题发布了修复补丁,其版本号为831464,大小为430 KB。该补丁对应微软第831464号知识库文章。





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/75257,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode117. 填充每个节点的下一个右侧节点指针 II(dfs)

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 …

cmd命令大全

遍历当前盘所有文件 dir /ad/s/b ASSOC 显示或修改文件扩展名关联。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRLC 检查。BCDEDIT 设置启动数据库中的属性以控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。CALL 从另一个批处理程序调用这一个。CD 显示当…

mac web开发_如何设置Mac进行Web开发

mac web开发While you can build basic websites with nothing more than a text editor and browser, you may want to up your game by adding a JavaScript framework like React or Vue and useful tools like Git to your workflow.虽然可以只使用文本编辑器和浏览器来构建…

OpenGL研究3.0 多边形区域填充

OpenGL研究3.0 多边形区域填充 DionysosLai(906391500qq.com)2014-06-22 所谓多边形区域填充。就是将多边形内部区域,所有已相同色块填充。注意:这里讨论的多边形是简单多边形(即不考虑诸如五角星这样的相交多边形)。简单多边形&a…

[转]Android笔记:ScrollView嵌套ViewPager的滚动冲突解决方法

12345678910111213141516171819202122232425262728293031323334/*** 能够兼容ViewPager的ScrollView * Description: 解决了ViewPager在ScrollView中的滑动反弹问题 */ public class ScrollViewExtend extends ScrollView { // 滑动距离及坐标 private float xDistance, yDista…

android tv 乐视手机,乐视超4系列原生Android TV分享

固件:Official USA Firmware:USA BIN Firmware 5.8.050S_1028://mega.nz/#F!7PhyDI6D!TnwNlMmWXosK1uCUdpyNGg[/url]USA ZIP Firmware 5.8.056S_0420 (OTA ZIP, must be flashed only after flashing the above bin)://drive.google.com/open?id1N9...rNHVB_-VPIad…

ping、网络抖动与丢包

基本概念: ping: PING指一个数据包从用户的设备发送到测速点,然后再立即从测速点返回用户设备的来回时间。也就是俗称的“网络延迟” 一般以毫秒(ms)计算 一般PING在0~100ms都是正常的速度,不会有较为明显的卡顿。 测试…

Webtask后端即服务:无服务器快速教程

查尔斯厄勒(Charles Ouellet) (By Charles Ouellet) The word serverless is buzzing through dozens of dev circles today.如今, 无服务器一词正在数十个开发界中流行。 It has been for a while now.已经有一段时间了。 I’ve been meaning to exit my code ed…

leetcode145. 二叉树的后序遍历(dfs)

给定一个二叉树&#xff0c;返回它的 后序 遍历。示例:输入: [1,null,2,3] 1\2/3 输出: [3,2,1]class Solution {List<Integer> listnew ArrayList<>();public List<Integer> postorderTraversal(TreeNode root) {getPostorderTraversal(root);return list;…

[luoguP2801] 教主的魔法(二分 + 分块)

传送门 以为对于这类问题线段树都能解决&#xff0c;分块比线段树菜&#xff0c;结果培训完才知道线段树是一种特殊的分块方法&#xff0c;有的分块的题线段树不能做&#xff0c;看来分块还是有必要学的。 对于这个题&#xff0c;先分块&#xff0c;然后另开一个数组对于每个块…

鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...

遭遇美国“实体清单”封杀的第85天&#xff0c;华为“鸿蒙”横空出世&#xff01;8月9日下午&#xff0c;在华为全球开发者大会上&#xff0c;当余承东正式宣布鸿蒙系统(Harmony OS)发布的时候&#xff0c;全场掌声雷动&#xff01;世界上第一个由中国企业自主研发的全平台微内…

[arm驱动]linux内核中断编程

第一部分获取中断(开启硬件中断)一、中断的申请注销: 1&#xff09;中断的申请 12int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 2)中断的注销 1void free_irq(unsigned int irq, void *dev_id) 3&am…

关于VCP(Virtual Com Port)拓展的调试经历(一)

* The Overview 前日&#xff0c;接到老板部署的任务&#xff0c;将现有的基于STM32L151与L432的LoRaWAN程序中添加USB CDC(Communication Device Class)功能&#xff0c;并枚举为VCP(Virtual Com Port)用以替代以往的串口打印。很疑惑为什么以前架构代码的时候没有添加进去。。…

leetcode701. 二叉搜索树中的插入操作(dfs)

给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意节点值都不同。注意&#xff0c;可能存在多种有效的插入方式&#xff0c;只要树在…

三星s6 android 8.0,再见Android 8.0,三星s6全系列系统都停止了,第一代国王已经倒下了吗?...

对于Android用户而言&#xff0c;最令人兴奋的事情是系统更新&#xff0c;因为该更新意味着更流畅的体验和更加用户友好的功能. 但是&#xff0c;旧的三星S6并不是那么幸运&#xff0c;并且不再错过Android 8.0.三星s6的全系列指的是三星s6&#xff0c;三星s6 edge&#xff0c;…

devise tree_Devise如何确保您的Rails应用密码安全

devise treeby Tiago Alves由蒂亚戈阿尔维斯(Tiago Alves) Devise如何确保您的Rails应用密码安全 (How Devise keeps your Rails app passwords safe) Devise is an incredible authentication solution for Rails with more than 40 million downloads. However, since it ab…

Exchange 2010无法安装问题解决方法

当你在活动目录(AD)森林中安装多台全局编录服务器(GC)之后,默认情况下你会发现在AD站点里面自动生成二条站点连接,从上面的截图可以看到目前在AD森林的Default-First-Site-Name(默认站点)里面有6台GC。 从上面的截图可以看到目前只有一台叫做Sh-Site1GC(全局编录服务器)是处于运…

android edittext 不滚动,EditText 设置可以垂直滑动但是不可输入

一、前言&#xff1a;android:id"id/edtInput"android:layout_width"match_parent"android:layout_height"60dp"android:background"drawable/round_theme_3_gray"android:gravity"top"android:hint"string/please_inp…

snmpd修改端口

http://blog.csdn.net/cau99/article/details/5077239 http://blog.csdn.net/gua___gua/article/details/48547701转载于:https://www.cnblogs.com/diyunpeng/p/6829592.html

leetcode LCP 19. 秋叶收藏集(dp)

小扣出去秋游&#xff0c;途中收集了一些红叶和黄叶&#xff0c;他利用这些叶子初步整理了一份秋叶收藏集 leaves&#xff0c; 字符串 leaves 仅包含小写字符 r 和 y&#xff0c; 其中字符 r 表示一片红叶&#xff0c;字符 y 表示一片黄叶。 出于美观整齐的考虑&#xff0c;小扣…