HTTP 部署契約
HTTP 標頭:快取政策、重複欄位與下載檔名
貼上的標頭與產生的模板是設定輔助。依賴其行為前,請查證實際回應與接收端。
內容更新: · 維護者與修正回報
分開處理情境、順序與秘密
請求與回應欄位的意義不同。檢查區塊時應保留重複欄位及順序,Set-Cookie 不能任意攤平成逗號分隔值。從 DevTools 複製的文字,也不一定等於實際 HTTP/1.1 傳輸訊息。
Authorization、Cookie、自訂金鑰,甚至網址或檔名都可能含秘密。保留值的遮罩,分享時只用遮罩報告;在本機顯示值不等於同意外傳。解析只說明語法與情境,不證明真偽或傳輸安全。
儲存、新鮮度與驗證是不同決策
未附欄位清單的 no-cache 允許儲存,但重用前須成功重新驗證。no-store 要求快取不儲存,不是加密或可靠隱私保證。private 阻止共享快取儲存,不是禁止所有瀏覽器儲存。
對共享快取而言,s-maxage 優先於 max-age 與 Expires。實際重用也取決於回應年齡、驗證碼、狀態、方法、Vary、請求指令及實作。存活秒數情境不是快取命中的證明;個人化回應尤其應另查正式標頭與 CDN 設定。
檔名是建議,不是可信任路徑
filename 提供明確 ASCII 替代名稱,filename* 則提供 UTF-8 百分比編碼名稱。引號、反斜線跳脫與延伸參數編碼是不同處理;應拒絕 CR、LF 及其他控制碼,而不是試著修復標頭注入。
接收程式可能清理或替換檔名;不能因路徑分隔符、裝置名稱或副檔名,就允許任意寫入或執行內容。請以實際內容類型及接收瀏覽器測試,單憑產生文字無法證明下載行為安全。
Cache-Control: private, no-cache
→ 瀏覽器可儲存,重用前須重新驗證。
Content-Disposition: attachment; filename="report.csv"; filename*=UTF-8''%E5%A0%B1%E8%A1%A8.csv資料可信度