【问题标题】:In jQuery, how to http get a gzip file?在 jQuery 中,如何通过 http 获取 gzip 文件?
【发布时间】:2013-08-31 11:12:32
【问题描述】:

我自己运行一个简单的 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 代码 sn-p 以便在客户端浏览器中获取这两个文件。它正确警告 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 文件的完整内容?

【问题讨论】:

    标签: javascript jquery node.js curl gzip


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多