[英]In UIWebView, how to forcibly cache resources that are 'Pragma:no-cache'?
我正在將火車時刻表URL加載到UIWebView
。 刷新很慢,由於頁面臃腫雞飛狗跳整個網站的CSS,JS,圖像和其他有自己的響應頭設置為資源
Cache-Control:no-cache, no-store, must-revalidate
Pragma:no-cache
但是有
Last-Modified:Wed, 30 Apr 2014 02:48:09 GMT
即使
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:30 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
這些資源沒有被緩存。
問:我想知道如何,盡管他們響應頭的緩存這些資源,除了列車時刻表HTML(這不應該被緩存)。 (可選)我想以NSlog
正在加載的資源。 我正在使用標准的UIWebView
和UIWebViewDelegate
方法。
對緩存本身做什么都沒有關系,因為它從一開始就永遠不會到達NSURLCache類。 HTTP / HTTPS的默認URL協議緩存策略會阻止對其進行緩存。
要使用UIWebView緩存此類請求,請首先實現並注冊一個自定義NSURLProtocol對象,如下所示:
在您的startLoading方法中,創建原始URL請求的可變副本,然后向該可變請求添加自定義標頭。 您給標題提供什么名稱或給它提供什么字符串值都沒有關系,只要您選擇的名稱不太可能出現在收到的任何請求的任何真實標題中。 (換句話說,將其命名為“ x-mycustomprotocoltag-watermelon”,但僅具有描述性。)
添加自定義標頭后,創建一個NSURLConnection對象,將協議對象指定為連接的委托,然后再次發出URL請求。
在協議類中,實現connection:willCacheResponse:委托方法,然后在該方法中自己創建一個NSCachedURLResponse對象並返回它。
在canInitWithRequest:方法中,檢查自定義標頭,如果看到它,則返回NO,這樣您就不會最終無限期地處理請求。 同樣,如果不是HTTP或HTTPS請求,則返回NO。 否則,返回是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.