我正在閱讀有關HTTP緩存的Google性能文檔,文檔號爲https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching,本文檔指出我們應儘可能使用ETags。我正在使用ASP.NET Web Api 2.2。我現在正試圖在我所有的公共API中實現ETag。我正在考慮使用MD5來實現ETag。我的意思是,我將使用MD5對每個請求散列json響應。對每個請求使用MD5.calculateHash是否有任何性能問題?我的json響應大小不太大(在1到20KB的範圍內)。在ASP.NET Web API中使用MD5實現HTTP緩存Etag功能
0
A
回答
3
是的,會有性能問題。計算哈希需要時間。但是,您可能會發現,計算該散列的成本與通過將不變的字節傳輸到客戶端所節省的性能相比並不顯着。
但是,我們不能保證您能夠通過Etags獲得性能改善。這取決於很多事情。您是否要在每次請求時重新生成服務器上的Etag,以將其與傳入請求進行比較?或者你打算創建一個etag值的緩存,並在資源更改時使它們失效?
如果您要在每個請求中重新生成etag,那麼從數據庫中提取數據並格式化表示的時間可能會大大超過在線路上發送幾個字節所花費的時間。特別是如果整個表示可以適合單個網絡數據包。
這裏的關鍵在於詢問您是否真的需要Etags的性能增益,並且這是否值得執行。通過設置緩存控制頭來啓用客戶端專用緩存,可以爲您提供所需的所有優勢,而無需實施etags。
我有很多帖子說進入這個主題的詳細信息:
相關問題
- 1. HTTP緩存和ETag頭
- 2. ASP.NET Web API緩存
- 3. ASP.Net的Web API - 緩存
- 4. 無法在android中實現HTTP緩存
- 5. 在ASP.NET C#web應用程序中實現SMS發送功能
- 6. HTTP緩存:爲什麼使用ETag而不是緩存控制和/或過期?
- 7. HTTP ETag的再現
- 8. ASP.NET Web API中的緩存選項
- 9. 如何緩存.NET Web API請求(&使用w/AngularJS $ http)
- 10. 如何在ASP.NET Web API中使用Windows Azure實現授權
- 11. 在ASP.NET中使用緩存
- 12. 在asp.net中實現「預覽」功能mvc
- 13. 在ASP.NET中實現「記住我」功能
- 14. 在ASP.NET緩存中緩存EF實體
- 15. 用Asp.Net Web Api實現Angular 2
- 16. 在WCF中實現緩存功能所需的建議
- 17. 在HTTP協議中ETag和Content-MD5有什麼區別?
- 18. 使用Guava實現緩存
- 19. 在asp.net web應用程序中緩存
- 20. 緩存ASP.NET MVC Web API結果
- 21. ASP.NET Core 2.0 Web API響應緩存
- 22. '緩存控制和ETag在Angular2中
- 23. 在ASP.NET Web API中映射HTTP路由
- 24. 使用OAuth2 Adal Angularjs Web APi功能存在問題 - Web APi未授權
- 25. 如何在mvc 4 web api中使用HttpResponseMessage對象設置etag?
- 26. ASP.NET核心Web API響應與過期緩存頭緩存
- 27. apache httpclient和etag緩存
- 28. 改造ETAG和緩存
- 29. ASP.NET MVC 4 Web Api:診斷功能
- 30. 在Asp.net Web應用程序中實現Google Sheet API
沒有數據庫交互。我只是在每個請求上使用MD5散列響應json,並將它與IfNoneMatch頭進行比較?做這個的最好方式是什麼?順便說一句,Google建議使用ETags – user960567 2014-10-28 19:55:02
@ user960567好吧,如果生成json響應的代價是零,那麼生成哈希的代價可能低於通過線路發送字節的代價,所以返回Etag可能會使得感。 – 2014-10-28 20:04:00
Darrel,坦率地說,我在所有公共API中使用Azure Redis Cache X分鐘。因此,我首先要做的是檢查redis緩存的響應,如果存在(或不存在從數據庫中獲取它),然後將其採用緩存控制max-age = X分鐘和ETag頭返回響應。在發送帶IfNoneMatch的響應檢查ETag之前。如果相同,則爲200,否則爲200.您如何看待這種方法? – user960567 2014-10-28 20:14:37