TLDR:
Public, max-age=<VALUE>和maxage=<VALUE>, s-maxage=<VALUE>快取控制語法有什么區別?
問題:
對于我的一個專案,我希望通過Cache-controlhttp-header 減少服務器負載。該專案在 Vercel 上作為無服務器功能托管,并在后端呼叫 GitHub 的 GraphQL API 以檢索 GitHub 用戶資訊。Vercel API和GitHub API都受到速率限制,因此我正在尋找最佳標頭以防止這些限制受到影響。為此,我目前正在使用以下 Cache-control 標頭:
public, max-age=14400, stale-while-revalidate=86400
根據Mozilla 檔案,此標頭應使私有瀏覽器快取和服務器快取保持新鮮 4 小時,而陳舊的快取可以在服務器上重新驗證時重復使用 1 天。此外,由于我沒有使用身份驗證標頭,因此我什至應該能夠洗掉Public關鍵字。
但是,Vercel 快取檔案建議使用以下標頭:
maxage=0, s-maxage=14400, stale-while-revalidate=86400
因此,根據 Vercel 檔案和Stack Overflow question,我認為以下標頭最適合減少 Vercel 和 GitHub 負載:
maxage=14400, s-maxage=7200, stale-while-revalidate=86400
據我了解,使用此標頭,單個用戶的快取將保持 4 小時的新鮮,而 Vercel 服務器每 2 小時重繪 一次快取,并且陳舊的快取可以在服務器上重新驗證時重復使用 1 天。
因為我不確定Public, max-age=<VALUE>和之間的區別maxage=<VALUE>, s-maxage=<VALUE>語法之間的區別,所以我很快想再次檢查我的理解。
根據Mozilla 檔案,如果和屬性<VALUE>相等,這兩種語法應該會產生相同的行為。但是,Symfony 檔案指出,該標志禁止快取在 stale-if-error 場景中使用過時的回應。因此,我的問題是:這兩種語法之間的確切區別是什么,您會推薦哪一種來減少 Vercel 和 GitHub api 的負載?maxages-maxages-maxage
uj5u.com熱心網友回復:
Vercel 推薦的快取標頭非常適合最小化 API 呼叫的數量:
Cache-Control: maxage=0, s-maxage=N
s-maxage用于控制 Vercel 邊緣網路的快取,允許它提供快取的回應,而不是呼叫無服務器函式。據我所知,它沒有自己的速率限制。
當然,除了減少 API 呼叫之外,您可能還有其他快取目標。所以你可能想使用maxage允許瀏覽器快取來減少用戶的延遲。
使用 也是一個好主意stale-while-revalidate,但請注意,這只是一種減少延遲的機制。重新驗證仍然會發生,因此它不會影響 API 呼叫的數量。
至于public,這意味著“任何快取都可以存盤回應,即使回應通常是不可快取的或只能在私有快取中快取”。如果您的回應已經可以被公共快取快取,那么這個指令將沒有任何效果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/518636.html
