所以我已經閱讀了一些關於在RESTfull API中使用Etags的文章,其中絕大多數人說Etag頭文件應該是資源/實體/對象的散列,接縫浪費。RESTfull API中使用的Etags通常被描述爲散列
使用散列:請求來了一個給定的Etag,資源需要被提取(通常從數據庫),然後它需要使用MD5/SHA /任何散列和結果與Etag比較,這需要時間和CPU。
Etag可作爲行的另一列(與任何正常行更新並行更新)存儲在數據庫中,因此無需爲每個請求計算它,然後在SELECT查詢中您可以通過WHERE實體.etag == ETAG。這意味着Etag必須從數據庫和客戶端帶外生成到數據庫,這是有點限制的。
如果您要將它存儲在數據庫中,那麼您最好使用上次更新的時間,這是一個本地數據庫函數(nornally),不需要額外的處理(哈希)。
爲什麼建議使用散列?
有問題藏在這裏某處,還是你只是想和我們分享你的想法? – Chris
etag的最初目的是通過在資源被再次請求並且沒有改變時返回304來確保安全帶寬。它並不打算在服務器上節省處理時間。一個聰明的實現也可以做到這一點,但對於原始計劃,散列是一個不錯的選擇。 –
@Klaus D這是可以理解的,但是當有更好的(?)替代散列時,通過使用散列節省帶寬來增加處理時間/資源消耗似乎不合邏輯?我猜測哈希會解決有點奇怪的參數,如果客戶端正在更新具有相同/不變值的資源,導致上次更新時間發生變化,則會使所有Etags無效。 – Metalstorm