在jQuery中,如何获取一个gzip文件?

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

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

在我的静态内容文件夹中,有两个文件用于testing目的: 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的完整内容。 怎么了?

我试图从“文本”更改为“应用程序”的数据types,但遇到了“parsing错误”,说“没有从文本到应用程序的转换”。

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

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

我自己已经想出了解决scheme。 添加mimeType: "application/octet-stream; charset=x-user-defined" ,这是很好的去。