2

我自己运行一个简单的 http 服务器,使用 node.js 和 express.js。

var express = require('express');
express().use(express.static(__dirname)).listen(3000);

在我的静态内容文件夹中,有两个用于测试目的的文件:myfile.csvmyfile.csv.gz. 它们的大小分别为 685 和 403 字节。我曾经curl -I查看他们的响应标头。该Content-Length字段正确反映了文件大小。

curl -I http://localhost:3000/myfile.csv

HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
ETag: "685-1377648449000"
Date: Wed, 28 Aug 2013 11:12:40 GMT
Cache-Control: public, max-age=0
Last-Modified: Wed, 28 Aug 2013 00:07:29 GMT
Content-Type: text/csv; charset=UTF-8
Content-Length: 685
Connection: keep-alive

curl -I http://localhost:3000/myfile.csv.gz

HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
ETag: "403-1377677249000"
Date: Wed, 28 Aug 2013 11:12:48 GMT
Cache-Control: public, max-age=0
Last-Modified: Wed, 28 Aug 2013 08:07:29 GMT
Content-Type: application/octet-stream
Content-Length: 403
Connection: keep-alive

然后我编写了下面的 JavaScript 代码片段,以便在客户端浏览器中获取这两个文件。它正确警告 685,即myfile.csv.

$.ajax({
    type: 'GET',
    url: "myfile.csv",
    dataType: "text",
    success: function (result) {
        alert(result.length);
    },
});

但是,当我将 url 字段更改为 时myfile.csv.gz,脚本会提示 387 而不是 403。我无法获取myfile.csv.gz. 怎么了?

我尝试dataType从“文本”更改为“应用程序”,但遇到“解析错误”,提示“没有从文本到应用程序的转换”。

我也尝试添加headers: { "Accept-Encoding": "gzip" },但遇到错误说“拒绝设置不安全的标头“Accept-Encoding””。

如何在客户端浏览器中使用 jQuery 获取 gzip 文件的完整内容?

4

1 回答 1

1

我自己想出了解决方案。添加mimeType: "application/octet-stream; charset=x-user-defined"就可以了。

于 2013-08-28T15:20:03.790 回答