網(wǎng)絡(luò)請求緩存策略

緩存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é)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容