2017-07-31 3 views
0

初めてCGIスクリプトとして取り組んでいたことがありました。私はブラウザ(両方のChromeとFirefoxの両方)がContent-Lengthヘッダを認識せず、ユーザに「不明」なサイズを知らせていない。ブラウザがApacheとcgiを使用するときにContent-Lengthヘッダーを認識しない

enter image description here

私はあまりにもwget Linuxでこれをテストすると、ツールがうまくサイズを認識しています。

私はopenssl s_client -connectかかわらず、手動でこれをテストするとき、私は以下のヘッダを取得する:

次のようにWebサーバから正確な出力は次のとおりです。

HTTP/1.1 200 OK 
Date: Sun, 30 Jul 2017 20:12:20 GMT 
Server: Apache/2.4.25 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.0.2g 
Content-Disposition: attachment; filename=foo.000000000G-000000001G.foofile.txt; 
Content-Length: 501959790 
Vary: Accept-Encoding 
Content-Type: text/plain;charset=utf-8 

誰が不正な形式/欠けているものをお勧めすることはできますか?

答えて

0

最終的にクラックされます。

これは予期せぬことをApacheが実行したために発生しました。 ApacheはCGIスクリプトの出力をオンザフライで圧縮しています(Content-Encoding: gzipで送信しています)。これはファイルのサイズを変更しますが、Apacheはヘッダーを送信するときにどのくらい変更されるかを知ることができません。ファイルはそれぞれ1GBであるため、送信を開始する前にgzippedコンテンツをキャッシュすることはできません。したがって、ファイルサイズを知ることはできません。これは、Transfer-Encoding: chunkedに変更する必要があることを意味します。

これを修正する方法の1つは、Apacheがコンテンツを圧縮できないようにするヘッダに設定されています。Content-Encoding: noneこれは、1/2GBファイルの送信に時間がかかることを意味します。

もう1つは、手動でCGIスクリプトのコンテンツをgzipし、0​​とContent-Length: <gzipped size>と設定することです。これは私が送る前に圧縮されたサイズを解決するために必要となります。

関連する問題