[request
setAllowCompressedResponse
:NO
];
-----------------------------------------------------------------
-----------------------------------------------------------------
從0.9版本開始,ASIHTTPRequest會提示服務器它能夠接收gzip壓縮過的數據。web
許多web服務器能夠在數據被髮送以前壓縮這些數據——這能夠加快下載速度減小流量使用,但會讓服務器的cpu(壓縮數據)和客戶端(解壓數據)付出代價。總的來講,只有特定的幾種數據會被壓縮——許多二進制格式的文件像jpeg,gif,png,swf和pdf已經壓縮過他們的數據了,因此向客戶端發送這些數據時不會進行gzip壓縮。文本文件例如網頁和xml文件會被壓縮,由於它們一般有大量的數據冗餘。apache
apache 2.x以上版本已經配備了mod_deflate擴展,這使得apache能夠透明地壓縮特定種類的數據。要開啓這個特性,你須要在apache的配置文件中啓用mod_deflate。並將mod_deflate命令添加到你的虛擬主機配置或者.htaccess文件中。json
1
2
3
4
5
6
7
8
9
10
11
12
|
- (
IBAction
)grabURL:(
id
)sender
{
NSURL
*url = [
NSURL
URLWithString
:
@
"http://www.cccsee.cn
"
];
ASIHTTPRequest *request = [ASIHTTPRequest
requestWithURL
:url];
// 默認爲YES, 你能夠設定它爲NO來禁用gzip壓縮
[request
setAllowCompressedResponse
:
YES
];
[request
startSynchronous
];
BOOL
*dataWasCompressed = [request
isResponseCompressed
];
// 響應是否被gzip壓縮過?
NSData
*compressedResponse = [request
rawResponseData
];
// 壓縮的數據
NSData
*uncompressedData = [request
responseData
];
// 解壓縮後的數據
NSString
*response = [request
responseString
];
// 解壓縮後的字符串
}
|
當allowCompressedResponse 設置爲YES時,ASIHTTPRequest將向request中增長一個Accept-Encoding頭,表示咱們能夠接收gzip壓縮過的數據。若是響應頭中包含一個Content-Encoding頭指明數據是壓縮過的,那麼調用responseData 或者responseString 將會獲得解壓縮後的數據。你也能夠經過調用rawResponseData來得到原始未壓縮的數據。服務器
默認狀況下,ASIHTTPRequest會等到request完成時才解壓縮返回的數據。若設置request的shouldWaitToInflateCompressedResponses 屬性爲NO,ASIHTTPRequest將會對收到的數據進行實時解壓縮。 在某些狀況下,這會稍稍提高速度,由於數據能夠在reqeust等待網絡數據時進行處理。網絡
若是你須要對響應數據流進行流處理(例如XML和JSON解析),這個特性會頗有用。若是啓用了這個選項,你能夠經過實現代理函數request:didReceiveData:來將返回的網絡數據一點一點餵給解析器。函數
注意,若是shouldWaitToInflateCompressedResponses 被設置爲NO,那麼原始(未解壓)的數據會被拋棄。具體狀況請查閱ASIHTTPRequest.h的代碼註釋。url
1.0.3版本的新特性就是gzip壓縮request數據。使用這個特性,你能夠經過設置shouldCompressRequestBody 爲YES來使你的程序壓縮POST/PUT的內容,默認值爲NO。spa
apache的mod_deflate能夠自動解壓縮gzip壓縮的請求體(經過合適的設置)。這個方法適用於CGI內容,但不適用於內容過濾器式的模塊(例如mod PHP),這種狀況下,你就必須本身解壓縮數據。代理