WKWebView自從推出至今,一直有不斷地吐槽伴隨,誠然,WKWebView具備不少好處:速度更快、內存更少,可是它也有一些坑html
經過這幾天的研究,總結一下遇到的關於WKWebView緩存的一些事情nginx
一、二級頁面跳轉時仍然不可設置緩存策略web
用過UIWebView或WKWebView的朋友都知道,在loadRequest方法中的NSURLRequest對象,是能夠設置緩存策略的,如緩存
NSURLRequest * urlReuqest = [[NSURLRequest alloc]initWithURL:url cachePolicy:1 timeoutInterval:30.0f]; [_webView loadRequest:urlReuqest];咱們經過設置urlRequest的緩存策略爲 NSURLRequestReloadIgnoringLocalCacheData的操做,指定了接下來的請求必須從服務器端獲取,不能加載本地緩存
OK,而後咱們執行了一個網頁跳轉,跳轉到了一個新的連接,這時候,咱們能夠經過代理方法指定是否讓UIWebView或WKWebView進行跳轉服務器
可是這時候!咱們若是打印WebView的request成員變量的cachePolicy屬性,會發現它變成了NSURLRequestUseProtocolCachePolicy!也就是變成了系統默認的緩存策略url
這樣會致使若是有一個靜態頁面,該靜態頁面進行了更改,這時候前臺已經加載過的設備,除非清除掉所有緩存,不然一直不會加載出新的頁面spa
這個問題若是由APP端進行更改的話,只能用清理所有頁面緩存的方法解決,好比後臺更新了頁面,能夠更新一個狀態時前臺執行清理緩存的方法,這樣頁面就會從新加載,出現修改後的頁面代理
另外一個解決辦法是由服務器更改,我截取了一下百度小說訪問後的response的header文件,發現這樣一個字段code
"Accept-Ranges" = bytes; "Cache-Control" = "max-age=0"; Connection = "keep-alive"; "Content-Length" = 114; "Content-Type" = "text/html"; Date = "Wed, 03 Aug 2016 08:00:23 GMT"; Etag = "\"579f13e2-72\""; Expires = "Wed, 03 Aug 2016 08:00:23 GMT"; "Last-Modified" = "Mon, 01 Aug 2016 09:18:26 GMT"; Server = nginx;
咱們也能夠在Nginx服務器設置一個這樣的模組,生成一個Expires字段,與訪問時間同步,這樣就能夠略過WebView的緩存了orm
2.經過JS端增長參數
公司的大牛建議我使用這種辦法,並且他不建議在APP端進行修改,因此咱們訪問了原網頁,爲跳轉的window.href增長了一個時間戳,這樣實際上和百度小說的解決辦法是同樣的,每次進入頁面時都不加載緩存並直接訪問新頁面