緩存NSURLCache詳解和使用
1.參考此篇詳細(xì)博客地址
2.NSURLRequestCachePolicy的定義如下
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
- NSURLRequestUseProtocolCachePolicy
默認(rèn)的緩存策略察郁,其行為是由協(xié)議指定的針對該協(xié)議最好的實現(xiàn)方式 - NSURLRequestReloadIgnoringCacheData
從服務(wù)端加載數(shù)據(jù),完全忽略緩存 - NSURLRequestReturnCacheDataElseLoad
使用緩存數(shù)據(jù)酣难,忽略其過期時間;只有在沒有緩存版本的時候才從源端加載數(shù)據(jù) - NSURLRequestReturnCacheDataDontLoad
只使用cache數(shù)據(jù)怀读,如果不存在cache敌呈,請求失敗酵使;用于沒有建立網(wǎng)絡(luò)連接離線模式
NSURLRequestUseProtocolCachePolicy實現(xiàn)機制
由圖中可以看出趴乡,簡單流程如下:
1.如果請求的緩存響應(yīng)不存在对省,則URL加載系統(tǒng)直接從源端加載數(shù)據(jù);
2.否則晾捏,如果緩存響應(yīng)中沒有明確表示每次請求必須重新驗證蒿涎,則如果不是響應(yīng)的緩存過期了,則URL加載系統(tǒng)會返回緩存數(shù)據(jù)
3.如果緩存的響應(yīng)過期或者需要重新驗證惦辛,URL加載系統(tǒng)發(fā)送HEAD請求到源端劳秋,查看資源是否發(fā)生了變化。如果變化了胖齐,則URL加載系統(tǒng)取出從始發(fā)源的數(shù)據(jù)玻淑。否則,它返回緩存的響應(yīng)
http協(xié)議詳解(超詳細(xì))
網(wǎng)絡(luò)傳輸協(xié)議(http協(xié)議)
Transfer-Encoding簡介
transfer-eccoding所描述的是消息請求(request)和響應(yīng)(response)所附帶的實體對象(entity)的傳輸形式呀伙,規(guī)范定義格式如下:
舉個例子:Transfer-Encoding: chunked
transfer-encoding的可選值有:chunked,identity补履,從字面意義可以理解,前者指把要發(fā)送傳輸?shù)臄?shù)據(jù)切割成一系列的塊數(shù)據(jù)傳輸区匠,后者指傳輸時不做任何處理干像,自身的本質(zhì)數(shù)據(jù)形式傳輸。舉個例子驰弄,如果我們要傳輸一本“紅樓夢”小說到服務(wù)器,chunked方式就會先把這本小說分成一章一章的速客,然后逐個章節(jié)上傳戚篙,而identity方式則是從小說的第一個字按順序傳輸?shù)阶詈笠粋€字結(jié)束。