javascript – 使用fetch.js启用gzip压缩

我正在使用fetch.js(
https://github.com/github/fetch)向后端发送一个相对较大的json对象. json很大,因为它包含一个SVG图像字符串.

我不清楚fetch.js是否默认使用gzip压缩,或者我是否需要手动压缩和添加标头.任何帮助,将不胜感激.

返回新的承诺((resolve,reject)=> {
      fetch(api_base“/ api / save-photo”,{
        方法:’POST’,
        模式:’cors’,
        标题:{
          ‘Content-Type’:’application / json’
        },
        body:JSON.stringify(payload)
      })
        .then((response)=> {
          if(response.status === 404){
            抛出新错误(‘404(Not Found)’);
          } else {
            return response.json().then((json)=> {
              console.log(‘保存海报回复:’,json);
              返回json;
            });
          }
        })

最佳答案 我假设用你的线

body: JSON.stringify(payload)

有效载荷未压缩.

我还希望能够压缩/压缩有效负载主体,我还需要一个异步方法来适应我的其余代码.我正在努力的一点是找到一种方法来使用没有回调的zlib.

为实现这一目标,我做了以下……

在一个单独的帮助库中,我导入zib …

import zlib from 'zlib'

我创建了以下功能….

async function asyncCompressBody(body) {

    const compressedData = await compressBody(body);
    console.log("Data Compressed");

    return compressedData;

}

function compressBody(body) {

    return new Promise( function( resolve, reject ) {

        zlib.deflate(body, (err, buffer) => {
            if(err){
                console.log("Error Zipping");
                reject(err);
            }

            console.log("Zipped");

            resolve(buffer);
        });
    });

}

compressBody函数是围绕zlib.deflate的一个承诺. asyncCompressBody函数是一个异步函数,允许调用函数等待.

在调用函数中,我用它作为……

let compressedBody = await asyncCompressBody(jsonContent);

let headers = new Headers();
headers.append("Content-Type","application/json");
headers.append("Content-Encoding","zlib");

const response = await fetch(url,
    {method: 'POST',
    headers:headers,
    body:compressedBody});
点赞