如何通过Fetch获取未解码的原始Gzip编码网页至Uint8Array?
获取Fetch响应的原始gzip编码内容
要绕过Fetch的自动解码行为,直接获取服务器返回的原始gzip字节流,核心是在发起请求时设置decompress: false选项——Fetch API默认会自动解码带有Content-Encoding: gzip或deflate的响应,这个参数可以禁用该行为。
具体实现代码
async function proxyFetch(url) { // 发起请求时禁用自动解码 const rawResponse = await fetch(url, { decompress: false }); // 获取原始的gzip编码字节数组 const rawBuffer = await rawResponse.arrayBuffer(); console.log(`原始响应体大小:${rawBuffer.byteLength}字节`); // 将原始内容连同原始响应头返回给消费者 return new Response(rawBuffer, { headers: rawResponse.headers }); }
关键说明
decompress: false是Fetch API的标准配置项,设置后浏览器不会对响应内容进行解码操作,你拿到的就是服务器返回的原始字节数据。- 确保目标服务器确实返回了带有
Content-Encoding: gzip的响应,否则该配置不会产生任何效果。 - 返回给消费者时,务必保留原始响应头,这样下游客户端可以根据
Content-Encoding头自行决定是否解码内容。
内容的提问来源于stack exchange,提问作者donaddon
相关产品推荐
相关产品推荐

