You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求CSS样式表返回乱码,响应头为UTF-8,该如何排查解决?

问题:GET请求获取CSS文件返回乱码(响应头显示UTF-8)?

我尝试通过GET请求获取一个CSS样式表,但响应内容全部乱码。这是编码错误吗?响应头显示编码为UTF-8。代码如下:

var https = require('https'); 
var fs = require('fs'); 
var url ='https://d14pr3cu5atb0x.cloudfront.net/pkg/css/chimera-e6f0150f64.css'; 
var request = https.request(url, function (res) { 
  var data = ''; 
  res.on('data', function (chunk) { 
    data += chunk; 
  }); 
  res.on('end', function () { 
    console.log(data); 
  }); 
}); 
request.on('error', function ...

解决方案:处理gzip压缩的响应

嘿,我碰到过好多次这种情况!你的问题根本不是UTF-8编码的锅,大概率是这个CSS文件通过CloudFront CDN传输时被自动做了gzip压缩——虽然响应头标了Content-Type: text/css; charset=utf-8,但同时应该还有个Content-Encoding: gzip的头,你直接把压缩后的二进制数据拼字符串,自然会得到乱码。

另外注意,你原代码还漏了调用request.end(),这会导致请求一直挂着发不出去,这个也得补上。

修改后的代码如下,用Node.js的zlib模块处理解压:

var https = require('https');
var fs = require('fs');
var zlib = require('zlib'); // 引入zlib处理压缩流

var url = 'https://d14pr3cu5atb0x.cloudfront.net/pkg/css/chimera-e6f0150f64.css';

var request = https.request(url, function (res) {
  // 根据响应头的压缩类型选择对应的解压流
  var decompressStream;
  if (res.headers['content-encoding'] === 'gzip') {
    decompressStream = zlib.createGunzip();
  } else if (res.headers['content-encoding'] === 'deflate') {
    decompressStream = zlib.createInflate();
  } else {
    // 没有压缩的话直接用原响应流
    decompressStream = res;
  }

  var data = '';
  decompressStream.on('data', function (chunk) {
    data += chunk;
  });

  decompressStream.on('end', function () {
    console.log(data); // 现在应该能看到正常的CSS内容了
  });
});

request.on('error', function (err) {
  console.error('请求出错:', err);
});

request.end(); // 必须调用end来发送请求

你可以先在回调里打印console.log(res.headers),确认一下是否存在content-encoding字段,这样就能100%确定是不是压缩导致的问题啦~

内容的提问来源于stack exchange,提问作者miriamsimone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:56:19