緩存NSURLCache詳解和使用
1.參考此篇詳細博客地址
2.NSURLRequestCachePolicy的定義如下
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
- NSURLRequestUseProtocolCachePolicy
默認的緩存策略,其行為是由協(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é)議詳解(超詳細)
網(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é)束。