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

标签 javascript json gzip fetch-api

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

fetch.js是默认使用gzip压缩,还是需要我手动压缩加header?

return new Promise((resolve, reject) => {
  fetch(api_base + "/api/save-photo", {
    method: 'POST',
    mode: 'cors',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(payload)
  })
    .then((response) => {
      if (response.status === 404) {
        throw new Error('404 (Not Found)');
      } else {
        return response.json().then((json) => {
          console.log('save poster response: ', json);
          return json;
        });
      }
    });
});

最佳答案

使用https://github.com/nodeca/pako (更快的 zlib 端口)。

添加以下导入:

import { gzip } from 'pako';

然后,改变:

body: JSON.stringify(payload)

收件人:

body: await gzip(JSON.stringify(payload))

并添加标题:

'Content-Encoding': 'gzip',

或者,如果您不使用 await/async 语法,您的示例代码将变为:

return new Promise((resolve, reject) => {
  gzip(JSON.stringify(payload)).then((gzippedBody) => {
    fetch(api_base + "/api/save-photo", {
      method: 'POST',
      mode: 'cors',
      headers: {
        'Content-Encoding': 'gzip',
        'Content-Type': 'application/json'
      },
      body: gzippedBody
    })
      .then((response) => {
        if (response.status === 404) {
          throw new Error('404 (Not Found)');
        } else {
          return response.json().then((json) => {
            console.log('save poster response: ', json);
            return json;
          });
        }
      });
  });
});

关于javascript - 使用 fetch.js 启用 gzip 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943481/

相关文章:

json - 更新 Opscode Chef 中的自动属性(serialized_object)

c# - 如何向 Json.NET 输出添加注释?

javascript - 如何从 ASP.NET 检索 JSONdata 并将其发送到 jQuery? (实现全日历)

c# - 将 .NET GZipStream 类与 Mono 结合使用

f# - 如何在 f# 中读取 gzip 文件?

javascript - 如果失败,如何继续使用 jQuery ajax 调用 API 直到 3 次?

javascript - Fabric.js 导出为 svg 时出现圆圈问题

django - 使用 django_compressor 将文件压缩为 gzip

javascript - 使用 Cube.js 保留数据

javascript - "ng new"选项 - Angular -cli