簡體   English   中英

將原始 gzip 編碼的 web 頁面提取到 Uint8Array 中

[英]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 編碼的ArrayBufferBlob等:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM