我自己运行一个简单的 http 服务器,使用 node.js 和 express.js。
var express = require('express');
express().use(express.static(__dirname)).listen(3000);
在我的静态内容文件夹中,有两个用于测试目的的文件:myfile.csv
和myfile.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 文件的完整内容?