弱 ETag 可以送到 If-Match 嗎?

如果伺服器傳送 Etag: 1233,過了 CDN Client 收到 Etag: W/"1233" 那麼 Client 回送 If-Match 應該傳送 W/"1233" 還是 1233? Original Post If-Match 的用意是在於防止「更新遺失」或「中途編輯衝突」(mid-air edit collision)。它的核心用途是在執行條件式請求時,確保用戶端操作的資源版本與伺服器上的目前版本完全一致1。 如果 CDN 傳送 Etag: W/"1233"(weak validator),因為 If-Match 標頭要求使用強比較函式1(即 E/1 ≠ E/12),因此用戶端無法使用這個值來建立 If-Match 條件式請求1。因此,如果伺服器傳送的是 Etag: W/"1233",則不應該在 If-Match 中傳送任何值來進行條件式更新。 如果要做快取的話,直接記錄 ETag,日後用 If-None-Match header 讓伺服器比較版本就行3。通常來說 If-Match 都是防止狀態改變的方法(POST 這些)1,CDN 通常不會去快取 POST 這類主要做 mutation 的方法,也就沒必要把 ETag 改成 weak representation,也就不太會遇到這個問題。 RFC 7232 – Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests – If-Match: https://datatracker.ietf.org/doc/html/rfc7232#autoid-15 ↩︎ ↩︎ ↩︎ ↩︎ RFC 7232 – Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests – ETag Comparsion: https://datatracker.ietf.org/doc/html/rfc7232#autoid-11 ↩︎ ...

September 21, 2025 · pan93412