2

node.js と express.js を使用して、単純な http サーバーを自分で実行しています。

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

私の静的コンテンツ フォルダーには、テスト用の 2 つのファイルがあります: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

次に、クライアント ブラウザーで 2 つのファイルをフェッチするために、以下の JavaScript コード スニペットを記述します。のサイズである 685 を正しく警告しmyfile.csvます。

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

ただし、url フィールドを に変更するmyfile.csv.gzと、スクリプトは 403 ではなく 387 を警告します。 の完全なコンテンツを取得できません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 に答える