工程 · 2 min read
一個 HTTP request
Request 就是一次跨網路的函式呼叫。整理 method、header、ETag 和 status code,包括後來讓整層 cache 失效的 HEAD 和 405。
Request 像一次跨網路的函式呼叫。Request 帶參數,response 是回傳值。
我是後端工程師,每天都在寫 API。但我很少看 header 和 status code 的細節。這次追查讓我把它們重新看了一遍。
- Header:一行
name: value。中間的每一層(CDN、load balancer)都會讀 header,有些層還會加自己的 header(Cache header:誰設定,誰讀取)。 - ETag:檔案內容的版本標籤。檔案內容改變,ETag 就跟著改變。
Method
- GET:「把檔案給我」。Response 有 header 和 body。
- HEAD:「只給我 header」。Header 和 GET 一樣,body 是空的。Cache 可以用 HEAD 檢查檔案的 ETag、大小和日期,不用下載整個檔案。
Status code
我一開始覺得 HEAD 和 405 是冷門知識。後來整個問題的關鍵,就是一個 HEAD 拿到 405(Proxy 不接受 HEAD,刷新永遠失敗)。
冷門的 method 和 status code,常常就是 bug 藏身的地方。
延伸閱讀:CDN 是什麼、Cache 的新鮮度:fresh、stale 和 304、Cache header:誰設定,誰讀取、Proxy 不接受 HEAD,刷新永遠失敗。或回到系列總覽。