如何使用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.pswp.cn/news/392934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392934.shtml
英文地址,請注明出處:http://en.pswp.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;小扣…