Skip to content
ADP
API Design PrincipleBETA

[ADP-144] Vary

指導

  • API 設計不應(SHOULD)使用 Vary; 應(SHOULD)使用 ETag 作為替代。參見 ADP-128: ETag
  • 如果必須使用 Vary,應謹慎和節制地使用。
  • 使用 Vary 時,必須確保所有列出的標頭實際上都用於內容協商過程。

理由

雖然 Vary 對內容協商有用,但它常常導致緩存效率低下和複雜性。使用 ETag 代替提供了一種更直接和高效的緩存機制。

示例

使用 ETag 代替 Vary

http
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

必須使用 Vary 時

http
HTTP/1.1 200 OK
Content-Type: application/json
Vary: Accept-Language

考慮因素

  • 使用 Vary 可能導致緩存命中率降低,特別是對於 CDN 和代理緩存。
  • ETag 提供了更精確的緩存機制,而不會帶來與 Vary 相關的複雜性。
  • 如果需要內容協商,考慮不過度依賴 Vary 的替代設計。

相關 ADP

參考資料