HTTP中的ETag在移動客戶端的應用

2021-09-19 12:54:47 字數 1344 閱讀 8133

絕大多數移動客戶端在設計網路模組時,都會選用http作為客戶端和服務端通訊的網路協議。隨著業務的不斷發展以及使用者量的持續增長,整個客戶端的穩定性和效能會逐漸成為關注的焦點,其中網路的效能優化更是重中之重,本文介紹的 etag 快取技術,可以在快取資料的同時做到資料的實時更新,適用於對資料實效性要求較高的業務。

相同的兩次請求返回的結果相同時,第一次返回的結果快取在客戶端,第二次服務端不再返回結果,僅返回乙個特殊的狀態碼,告訴客戶端第二次請求的結果與上次相同,可以直接使用上次返回的資料。

實現中,會用到http頭中的兩個字段:

互動過程總結如下圖:

本文的示例**使用nsurlsession實現,由於nsurlsession完善的快取策略,為了演示 etag 的用法,需要先關閉快取。

let config = nsurlsessionconfiguration.defaultsessionconfiguration()

config.requestcachepolicy = nsurlrequestcachepolicy.reloadignoringcachedata

let session = nsurlsession(configuration: config)

建立請求的nsurlrequest物件:

let url = nsurl(string: "")!

let request = nsmutableurlrequest(url: url)

設定 http header 中的 if-none-match 字段:

if let tag = self.findtagbyurl(url)
在發起請求時,先檢查相同的請求是否存在 etag,如果存在就,就意味著上次請求的應答資料已快取。

發起請求並處理應答資料:

self.datatask = session.datataskwithrequest(request,

completionhandler: )

self.datatask?.resume()

如果 http 返回的狀態碼是 200,說明是伺服器正常返回資料,此時記錄 etag 的值並快取應答資料:

if (resp.statuscode == 200)
如果返回 304,說明應答資料沒有變化,與上次請求的一樣,則直接返回快取中的資料:

else if (resp.statuscode == 304)

理解HTTP響應的ETag

在使用 google page analysis 和 yslow 進行網頁效能分析的時候,都會遇到 configure entity tags etags 這一項。要理解etage,首先要弄清楚 http 響應頭的last modified.在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是2...

通過http協議中的etag進行使用者追蹤

使用者追蹤是同過乙個唯一標識能定位到乙個使用者。例如a使用者訪問 生成乙個唯一cookie,隨後使用者請求都帶上這個cookie,那麼通過這個cookie就可以分析使用者的訪問或操作行為。通過瀏覽器通常進行使用者追蹤使用的常用手段如幾種,但不僅限於這幾種。除此之外還可以通過http 1.1中的eta...

你應該知道的HTTP頭 ETag

在http1.1規範中,新增了乙個http頭資訊 etag。對web開發者來說,它是乙個非常重要的資訊。它是用作快取使 用的兩個主要的 頭資訊之一 另乙個是expires 除此之外,在rest架構中,它還可以用於控制併發操作 上節中已經大 致介紹atompub中控 制併發的流 程 那麼etag是什麼...