本文為您列出了邊緣程式ER(EdgeRoutine)的Fetch相關的常見問題。

Fetch支援解壓縮嗎?

Fetch預設會自動解壓縮,有以下三種解壓縮行為:
  • decompress:預設行為,讀取response的content-encoding頭,從右往左數,第一個非Identity的值作為解壓縮演算法,例如 content-encoding: gzip, identity ,選擇gzip當作演算法。如果您刪除了該演算法參數,刪除後的頭如下:
    • content-encoding:identity, gzip 表示Fetch後返回的原始頭, content-encoding: identity 表示被ER刪除後的頭。
    • content-encoding: gzip 表示Fetch後返回的原始頭, content-encoding 表示被ER刪除後的頭。
    说明 刪除頭後內容會透明顯示,就像來源站點沒有回gzip的內容。如果ER無法識別對應的演算法會拋出異常,目前僅支援gzip演算法,未來可能會支援brotli演算法。
  • fallbackIdentity:與decompress相似,無法解壓縮時不會報錯,直接當作identity處理。這個異常是有意為之,因為內容是壓縮過的,你的讀取可能沒意義,因為你可能需要處理。
  • manual:不解壓縮。
您可以通過以下方式手動設定Fetch的解壓縮策略:
  • fetch(url, {decompress: "manual"})
  • fetch(url, {decompress: "fallbackIdentity"})

Fetch的最大限制是多少?

所有的上下文即瀏覽器請求的邊緣截獲,發起的子請求預設最大限制是32個,每一次3xx跟隨也算32個,將來支援的cache API也算32個,如果您需要提高限制配額,請 提交工單申請。

ER可以識別非法URL嗎?

ER無法識別非法的URL,如果您的URL含有非法字元,會提示沒有正確的encode,請您確保URL正確。

串連池的最大限制是多少?

ER會自動為Fetch做串連池功能,用以規避TCP或SSL的握手消耗。串連池的數量限制預設是128,超過128個串連後,串連池將不再進行cache串連,您可以申請提升配置,增加串連池的上限。

串連池屬於使用者層級的串連池,非請求層級。如果當前的串連池為空白,ER會嘗試建立串連。當您完整讀取了某次請求的回複body時,ER才能cache串連。

以下代碼可以確保將Fetch的body讀取完畢。

     async function fetchAndIgnore(url, options) { let response = await fetch(url, options); // 該方法調用可以使ER強制忽略回複的body,並保證body被讀取完畢。 await response.ignore(); }