[英]Fetch raw gzip-encoded web page into Uint8Array
我正在使用 fetch 來檢索 URL。這是在充當代理的代碼中,如果它收到內容編碼的響應:gzip,我想獲取原始數據,以便我可以將其發送回消費者而無需解碼它。
但我認為沒有辦法做到這一點。 Response.blob, Response.arrayBuffer, Response.body.getReader(), ....這些似乎都是解碼內容。
因此,例如,在我的測試用例中,我最終得到一個 15K 的字節數組,而不是只有 4k 的實際響應主體。
有沒有辦法在不解碼的情況下獲取響應的原始內容?
瀏覽器在將響應數據顯示到編程 Javascript 層之前,會自動解碼其低級網絡層中壓縮的、gzip 編碼的 HTTP 響應。 鑒於壓縮字節已經通過網絡傳輸並在用戶的瀏覽器中可用,該數據已經“發送給客戶”。
壓縮流 API可以高效地創建 Gzip 編碼的ArrayBuffer
和Blob
等:
const [ab, abGzip] = await Promise.all((await fetch(url)).body.tee().map(
(stream, i) => new Response(i === 0
? stream
: stream.pipeThrough(new CompressionStream('gzip'))
).arrayBuffer()
))
https://batman.dev/static/74634392/
一個 gzip 編碼的 SVG 圖像作為可下載文件鏈接提供給用戶。 使用 gzip 編碼響應中的fetch()
檢索原始 SVG 圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.