SyntaxError:在使用gzip提供文件时,仅在firefox中抛出非法字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SyntaxError:在使用gzip提供文件时,仅在firefox中抛出非法字符相关的知识,希望对你有一定的参考价值。

我使用webpack将我的应用程序捆绑到bundle.gzip使用compress插件。

new CompressionPlugin({
  asset: '[path].gz[query]',
  algorithm: 'gzip',
  test: /.js$|.css$|.html$/,
  threshold: 10240,
  minRatio: 0.8,
}),

然后我有一个快速服务器,提供Web包捆绑的所有内容,并为响应添加内容编码。

const path = require('path')
const express = require('express')

const app = express()
const server = require('http').createServer(app)

app.get('*.js', (req, res, next) => {
    req.url = `${req.url}.gz`
    res.set('Content-Encoding', 'gzip')
    next()
})

app.use(express.static(path.resolve(__dirname, 'dist')))
app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist/index.html'))
})
// eslint-disable-next-line
console.log("Server listening on port 8500")
server.listen(8500)

这在除了firefox之外的每个浏览器都很好用,当我打开控制台时看到这个。

enter image description here

问题是什么我认为这个问题与内容编码有关

答案

您需要为响应设置Content-Type

// For JS
app.get('*.js', function(req, res, next) {
  req.url = req.url + '.gz';
  res.set('Content-Encoding', 'gzip');
  res.set('Content-Type', 'text/javascript');
  next();
});

// For CSS
app.get('*.css', function(req, res, next) {
  req.url = req.url + '.gz';
  res.set('Content-Encoding', 'gzip');
  res.set('Content-Type', 'text/css');
  next();
});

以上是关于SyntaxError:在使用gzip提供文件时,仅在firefox中抛出非法字符的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 托管上提供 gzip 文件

Perl:使用 gzip 打开不存在的 gz 文件时,`die` 不起作用

在 JSON.parse 的位置 0 处获取“SyntaxError:”JSON 中的意外标记”

带有 webpack 的 Vue.js 不提供压缩的 GZIP .js 文件

Perl | Perl读取gzip压缩文件

在firebase上使用gzip压缩