㈠ 如何解決http封包中gzip編碼的html
如何解決http封包中gzip編碼的html
大家都知道,在默認模式下,http協議中發送的網頁的Html代碼是經過gzip編碼後傳送的。那麼我們怎麼才能回復這段編碼後的html呢?
大家可能都知道linux下有一個gzip命令。可以把文件壓縮成gzip編碼的格式,即*.gz
而對於文件的壓縮和解壓縮,可以採用zlib庫中提供的各種介面來進行操作。但是這里問題來了。關於gzip編碼的那些函數都帶有gz開頭的標示。而這些介面維護了一個名叫gz_stream的結構體。並且是針對文件FILE*操作的。
而我們要解決的問題是,我們把截取的封包中的gzip編碼的內容拿出來,放到一個buffer中。那麼怎麼才能針對這個buffer中的數據應用這些介面呢?
我本來的想法是能不能在這些介面中找到專門對內存中的數據進行解碼?
考慮這個問題,我看了這個庫的源代碼。後來放棄了。至於放棄的原因,可能是我意志力不夠,或者不想看那些源代碼了。總之,我看了一天,看的我頭疼。
後來我就想個辦法繞開這一思路,走個彎路。問題豁然開朗。
思路如下:
1. 把獲取到的經過編碼的數據保存到一個文件中。注意寫文件的時候一定要以二進制方式。否則是不能解碼的。
2. 應用zlib中的介面,gzopen(),gzread(),gzclose()即可完成解碼的任務了。
㈡ 如何利用gzip壓縮網頁來提升網站瀏覽速度
純Tomcat 伺服器
如果您的 WEB 應用程序是跑在 Tomcat
伺服器下的,而且直接使用 Tomcat 所提供的 HTTP 服務,那建議你馬上動手,因為實在是太簡單了,你只需要在 server.xml
配置文件中給 HTTP Connector 增加一個 compression 的參數值為 on 並重啟 Tomcat
伺服器就立刻生效,配置如下:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" compression="on"/>
Tomcat
採用的是 HTTP/1.1 的 GZIP 壓縮協議,它會根據瀏覽器送過來的請求中的 accept-encoding 值是否包含 gzip
來判斷瀏覽器是否支持 gzip 壓縮協議,如果瀏覽器支持就啟用 gzip 壓縮,否則就不進行任何壓縮處理。Tomcat 中還有另外一個參數
compressableMimeType,這個參數可以用來指定壓縮哪種類型的內容,例如可以指定該配置值為:text/html,text
/plain ,則只壓縮 contentType 為 text/html 和 text/plain 的頁面,不過您最好也將 css 和
javascript 文件也算在壓縮的文件類型中,因為這兩者的壓縮效果也十分的明顯。
Apache 伺服器
在
apache 1.3 版本,大家常用 mod_gzip 對輸出內容進行壓縮,現在主流的瀏覽器都支持 gzip 解壓縮。在 apache2
下,這個模塊換名為 mod_deflate,對應的模塊文件名是 mod_deflate.so。mod_gzip 本文不做介紹,下面描述一下在
Apache 2 下如何啟用並配置 mod_deflate 模塊。默認安裝的 Apache 不管是 Windows 還是
Linux/Unix,都是不啟用該模塊的, Linux/Unix 下甚至不帶該模塊,你需要手工編譯這個模塊。
下面我們分別介紹在 Windows 和 Linux 操作系統下如何啟用並配置 mod_deflate 模塊。
在 Windows 下採用安裝程序安裝的 Apache 伺服器已經帶有 deflate 所需要的模塊 mod_deflate.so 和 mod_headers.so,我們只需要在 httpd.conf 配置文件中啟用並進行相關的配置即可,配置如下:
LoadMole deflate_mole moles/mod_deflate.so
LoadMole headers_mole moles/mod_headers.so
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
而
如果是 Linux/Unix 操作系統,如果你沒有在編譯安裝的過程中將所需要的兩個模塊 mod_deflate 和 mod_headers
編譯進去的話,那就稍微有點麻煩,首先我們先看如何在編譯安裝 Apache 過程中也同時編譯這兩個模塊,請在執行 configure
程序時增加兩個參數分別是:
# ./configure --enable-deflate --enable-headers
這樣在編譯完 Apache 後就可以直接在 httpd.conf 中啟用並配置 deflate 模塊了,配置的方法跟 Windows 平台下是相同的。
如
果說您的 Apache 已經在運行了,不想再重新編譯一次,那也可以選擇只編譯 deflate 模塊所需的文件 mod_deflate.c
和mod_headers.c。這兩個文件位於 {apache-src}/moles/filters/ 目錄下(其中 {apache-src}
為 apache 源文件所在的目錄)。使用如下命令來單獨編譯這兩個源文件。
# {apache-bin}/apxs -i -a -c {apache-src}/moles/filters/mod_deflate.c
# {apache-bin}/apxs –i –a –c {apache-src}/moles/filters/mod_headers.c
其中 {apache-bin} 為 Apache 安裝目錄下的 bin 目錄,接下來在 httpd.conf 直接配置該模塊即可。
很多時候你在單獨編譯 deflate 模塊的時候可能會碰到編譯錯誤,提示是:
Cannot load /opt/apache/moles/mod_deflate.so into server: /opt/apache/moles/mod_deflate.so: undefined symbol: deflate
解決的方法如下:
編輯 /usr/local/apache2/bin/apr-config 文件修改其中的 LDFLAGS 值為 "-lz",然後再重新編譯 mod_deflate 模塊,apxs -ica mod_deflate.c 即可。
為了省卻不必要的麻煩,請盡量在編譯安裝時直接加上 --enable-deflate --enable-headers 參數。
IIS 伺服器
微
軟的 IIS 伺服器同樣也是目前用得最多的 WEB 伺服器之一,而且用來運行 ASP 頁面也是必不可少的。IIS6,iis本身支持 gzip
壓縮,IIS5就比較費勁了,你可以找一些第三方的組件來處理,例如 httpzip,接下來我們介紹如何在 IIS6 中啟用壓縮功能。
打開 Internet 信息服務(IIS)管理器,右擊"網站"->"屬性",選擇"服務"。在 "HTTP壓縮" 框中選中 "壓縮應用程序文件" 和 "壓縮靜態文件",按需要設置 "臨時目錄" 和 "臨時目錄的最大限制",
設置網站屬性
接
下來配置 gzip 組件,在 Internet 信息服務(IIS)管理器,點擊 "Web 服務擴展"->"增加一個新的 Web
服務擴展...",在 "新建 Web 服務擴展" 框中輸入擴展名 "HTTP Compression",添加 "要求的文件" 為
C:\WINDOWS\system32\inetsrv\gzip.dll,選中 "設置擴展狀態為允許",如下圖所示:
設置 Web 服務擴展,新建 Web 服務擴展
還沒完呢,我們還需要修改一個配置文件,修改之前請先停止 IIS 服務,打開 C:\Windows\System32\inetsrv\MetaBase.xml,這個文件很大,找到下面一段信息:
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="1"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="0"
HcFileExtensions="htm
html
txt"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
dll
exe"
>
</IIsCompressionScheme>
增加一些要進行壓縮的文件後綴,其中 HcFileExtensions 是靜態文件的擴展名,增加 js 和 css 等;HcScriptFileExtensions 為動態文件的擴展名,增加 aspx,保存後啟動 IIS 即可生效。
最
後我們介紹如何來測試前面所做的工作是否起效,你可能會覺得很奇怪,配置好了,用瀏覽器打開頁面正常,查看頁面源碼,內容並沒有變化,大小也跟原來一樣,
怎麼回事呢?這是因為瀏覽器已經把內容解壓了的結果,有兩個方法來判斷壓縮是否生效:第一,查看 WEB 伺服器的日誌,不管是 Apache 或者是
IIS,二者的訪問日誌格式都差不多是下面這種格式:
127.0.0.1 - - [14/May/2006:08:44:28 +0800] "GET /manual/style/css/manual.css HTTP/1.1" 200 19351
最
後兩個數字分別是 HTTP 的結果碼(200 表示 OK),19351
表示的是響應內容的大小,把這個大小跟你在瀏覽器上查看源碼的大小比較一下就可以知道是否生效。另外一種方法就是自己寫一個 HTTP
客戶端的小程序並設置 Accept-Encoding 的值為 gzip,deflate,由這個程序去請求伺服器端的某個 URL
地址,然後列印出響應的內容,如果是一堆亂碼,恭喜你,配置成功。下面是一段 Java 寫的測試客戶端代碼(需要用到
commons-httpclient 包):
HttpClient http = new HttpClient();
String url = http://www.softbar.com;
GetMethod get = new GetMethod(url);
try{
System.out.println("fetching url : "+ url);
get.addRequestHeader("accept-encoding", "gzip,deflate");
int er = http.executeMethod(get);
if(er==200){
System.out.println(get.getResponseContentLength());
String html = get.getResponseBodyAsString();
System.out.println(html);
System.out.println(html.getBytes().length);
}
}finally{
get.releaseConnection();
}
結論
以
上是目前比較流行的兩個 WEB 伺服器軟體以及 Tomcat 伺服器對於頁面壓縮的配置方法;其他的一些 J2EE
應用伺服器如果不支持這個功能的話可以考慮利用過濾器(Servlet Filter)來進行處理,具體的代碼以及配置方法可以參考 Resin
伺服器所提供的文檔。但是有一點需要提醒各位讀者的是,本文介紹的訪問只是在伺服器本身的響應速度已經足夠優化的情況下進行,也就是說在帶寬成為系統瓶頸
的時候才來考慮該方案。
㈢ jmeter發送gzip數據服務端識別錯誤
驗證伺服器是否返回了gzip格式數據:
1. 線程組中添加一個「查看結果樹」監聽器
2.運行測試後,在監聽器取樣器結果標簽頁查看http伺服器的響應頭:
Content-Encoding: gzip
Vary: Accept-Encoding
post方式發送gzip格式文件:
1.http sample里選擇「同請求一起發送文件:」MIME類似設置為gzip
2.http 信息頭管理器添加http頭:
content-type:x-application/x-gzip
content-encoding:gzip
㈣ 怎樣在linux下對目錄進行壓縮生成gz文件
在linux下,使用gzip命令可以對目錄壓縮生成gz文件,具體步驟如下:
1、首先,連接相應linux主機,進入到linux命令行狀態下,等待輸入shell指令。
㈤ 寫C++程序的時候,怎麼編寫可以讀取gzip壓縮的文件請具體回答,最好有具體源代碼。
下載並使用libz和libz2的api,就可以讀取gzip文件。http://blog.csdn.net/yui/article/details/5707842
㈥ 如何編譯TrueCrypt源碼
TrueCrypt是一款開源的虛擬加密磁碟工具,目前最新版本是7.0a,本文以該版本源代碼為基礎,介紹了如何在VC2008下進行編譯。
環境配置
1. Microsoft Visual Studio 2008 SP1 (VC++ 2008)
2. Microsoft Visual Studio VC++ 1.52
3. NASM version 2.07 compiled on Jul 19 2009
4. gzip 1.2.4 Win32 (02 Dec 97)
5. PKCS11頭文件
6. Windows Driver Develop Kit 7600.16385.1
7. TrueCrypt 7.0a Source.zip
准備步驟
1. Microsoft Visual Studio 2008 SP1 (VC++ 2008) ,這個是必需的了
2. 安裝Microsoft Visual Studio VC++ 1.52,(這里為了方便管理編譯TrueCrypt所需要的lib,我們可以在c盤建立一個目錄,就命名為TrueCrypt)把MSVC++ 1.52安裝在C:\TrueCrypt\MSVC\
3. 下載NASM,解壓縮到C:\TrueCrypt\ NASM\
4. 下載gzip,解壓縮到C:\TrueCrypt\ gzip\
5. 下載PKCS11頭文件,解壓縮到C:\TrueCrypt\PKCS11_INC\
6. 下載WDK7600.16385.1(這個是目前最新的,更新消息參考微軟官網),安裝到E:\WinDDK\7600.16385.1\(這個目錄是我這邊這么設置的,在下面環境變數設置需要注意)
7. 下載TrueCrypt 7.0a源代碼(http://www.truecrypt.org/downloads2)
環境變數設置
右鍵我的電腦——屬性——高級——環境變數,添加下面幾個系統變數:
1. 變數名MSVC16_ROOT,變數值C:\TrueCrypt\MSVC
2. 變數名PKCS11_INC,變數值C:\TrueCrypt\PKCS11_INC
3. 變數名WINDDK_ROOT,變數值E:\WinDDK\7600.16385.1
4. 修改系統Path,在末尾增加C:\TrueCrypt\NASM;C:\TrueCrypt\gzip
環境變數設置完畢後需要重啟電腦
源代碼修改
1. 修改C:\TrueCrypt\PKCS11_INC\ pkcs11.h,添加
#define CKR_NEW_PIN_MODE 0x000001B0
#define CKR_NEXT_OTP 0x000001B1
可以直接添加在#define __PASTE(x,y) x##y後面一行
2. 修改TrueCrypt 7.0a Source其中的Setup項目中的Setup.h文件,添加
/*---region add by gc---*/
#include "wtypes.h"
const PROPERTYKEY PKEY_AppUserModel_ID = {
{
(unsigned long)2009,/*unsigned long Data1;*/
(unsigned short)12,/*unsigned short Data2;*/
(unsigned short)23,/*unsigned short Data3;*/
0x44,0x55,0x55,0x55,0x55,0x55,0x55,0x55
},/*GUID fmtid;*/
(DWORD)PID_FIRST_USABLE /*DWORD pid;*/
};
/*---endregion---*/
添加在文件的開始處,即
#ifdef __cplusplus
extern "C" {
#endif
後面一行即可。
到此為止,所有配置均設置完畢,打開TrueCrypt.sln解決方案,Build Solution就可以在Debug目錄生成Setup Files目錄,其下至少可以看到TrueCrypt.exe,truecrypt.sys,truecrypt-x64.sys這個三個文件了。
㈦ 哪位哥哥能給個python中 tarfile,gzip,zlib 用法的代碼
tarfile:
importtarfile
tar=tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()
gzip
importgzip
f=gzip.open('file.txt.gz','rb')
file_content=f.read()
f.close()
zlib
#https://docs.python.org/2.7/library/zlib.html
如果解決了您的問題請採納!
如果未解決請繼續追問
㈧ 如何用php實現頁面的GZIP壓縮輸出
第一步,你需要對php的設置如下:
php.ini: output_buffering = Off output_handler = ob_gzhandler zlib.output_compression = Off zlib.output_compression_level = -1
第二步,你需要在apache下增加如下設置:
AddOutputFilter DEFLATE html php js css
這樣就可以對html php js css進行gzip壓縮了。
第三步,你需要使用如下php壓縮html並輸出到客戶端的函數:
function compress_html($string) { return ltrim(rtrim(preg_replace(array("/> *([^ ]*) *</","//","'/\*[^*]*\*/'","/\r\n/","/\n/","/\t/",'/>[ ]+</'), array(">\\1<",'','','','','','><'),$string))); }
上面的這個正則表達式,很強大的哦,經過我本人親自測試可使用。
通過以上方法,你就可以將你的html代碼壓縮然後輸出給客戶端了。不信你可以查看源代碼,就是一行,網頁瞬間壓縮很小。
㈨ linux怎麼安裝軟體
1、打開系統,可以看到桌面,找到軟體中心,打開軟體中心