3

最近、自分のサイトで gzip の使用を開始しましたが、Opera を除くすべてのブラウザーで魅力的に機能し、データが破損しているためコンテンツを解凍できないというエラーが表示されました。テストとグーグルで収集できることから、g​​zipとチャンク転送エンコーディングの両方を使用すると問題が発生する可能性があります。css-files のような小さなファイルを要求してもエラーが発生しないという事実も、その方向性を示しています。

これは既知の問題ですか、それとも私が考えていないことが他にありますか?

また、Content-Length ヘッダーの送信と関係がある可能性があると述べた人もいます。

これは、私のコードの最も関連性の高い部分の簡略版です。

$contents = ob_get_contents();
ob_end_clean();
header('Content-Encoding: '.$encoding);
print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
$size = strlen($contents);
$contents = gzcompress($contents, 9);
$contents = substr($contents, 0, $size);
print($contents);
exit();
4

2 に答える 2

7

WebではGZipとチャンクエンコーディングが常に一緒に使用されているので、それだけで問題が発生するのではないかと思います。

チャンクエンコーディングが使用されている場合は、Content-Lengthヘッダーを送信しないでください。

また、gzipをネゴシエートするときは、Vary:Accept-Encoding(圧縮応答と非圧縮応答)を送信する必要があります。ETagを送信する場合は、圧縮応答と非圧縮応答で異なる必要があります。

http://redbot.org/からURLを実行してみてください。gzipエンコーディングに関するいくつかの一般的な問題がチェックされます。

于 2010-04-30T06:48:48.363 に答える
2

理想的には、クライアントからの要求ヘッダーをチェックして、エンコードされた応答をサポートしていることを確認する必要があります。検索するヘッダーは、「Accept-Encoding:gzip、deflate」です。また、クライアントがHTTP1.1を使用しているかどうかも確認する必要があります。

于 2010-10-24T01:07:01.963 に答える