リクエストのHTTP圧縮を有効にすることはできますか?


35

サーバー応答のhttp圧縮を有効にすることに関する多くの情報が表示されますが、着信要求の場合はどうですか。ブラウザが大きなフォームの投稿を圧縮してからサーバーに送信するのは理にかなっていないでしょうか?

別の例は、使用するREST Webサービスです。大きなXMLファイル(10 MB以上)を使用して頻繁にPUTリクエストを送信する必要があり、両側で帯域幅/速度のメリットが確実に得られます。

これはサーバー側の解決済みの問題ですか、それとも各Webアプリケーションが個別に処理する必要がありますか?

回答:


30

PUTサーバへのデータあなたがリクエストボディを圧縮し、設定する必要があり、圧縮Content-Encoding: gzipヘッダを。ヘッダー自体は圧縮されていない必要があります。mod_deflateに文書化されています

mod_deflateモジュールは、gzipで圧縮された要求本文を解凍するためのフィルターも提供します。この機能を有効にするには、SetInputFilterまたはAddInputFilterを使用して、DEFLATEフィルターを入力フィルターチェーンに挿入する必要があります。

...

リクエストにContent-Encoding:gzipヘッダーが含まれている場合、本文は自動的に解凍されます。リクエスト本文をgzipで圧縮する機能を持つブラウザはほとんどありません。ただし、WebDAVクライアントなど、一部の特別なアプリケーションは実際にリクエストの圧縮をサポートしています。

そして、それを説明する記事はこちらです

それでどうやってやるの?mod_deflateソースコードからの抜粋です。メインリクエストでのみ動作し、サブリクエストでは動作しません。これは、これを使用することを選択した場合、リクエストの本文全体をgzip圧縮する必要があることを意味します。たとえば、マルチパートリクエストでファイルを含む部分のみを圧縮することはできません。

別々に、サーバ応答コンテンツを要求することができるブラウザを設定することによって圧縮されるAccept-Encodingごとにヘッダーをここで

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

これにより、圧縮されたデータがブラウザに返されます。


5
+1注意してくださいyou must compress the whole request, inclusive of header。ただし、httpヘッダーは圧縮しないでください。圧縮する必要があるのは(引用した記事が正しく述べているように)完全に圧縮する必要があるのは、http本文だけです。
ユージンベレソフスキー14

1
これは間違っAccept-Encodingています。クライアントがサポートする圧縮をサーバーに伝えます。ヘッダーにContent-Encodingは、本文の圧縮が記述されています。
maaartinus 14

@maaartinusは、最初の引用の2番目の段落を参照してください。明確にするために答えを再編成しました。
アンディ

4

応答ではなく、圧縮された要求に関する部分に答えます。はい、それが広く使用されているように見えなくても可能です。クライアント側アプリは、適切なコンテンツエンコードヘッダーを設定する必要があります。サーバー側アプリに関しては、2つの選択肢があります。

  1. アプリはそれ自体でリクエスト本文の再膨張をサポートします。これを実行できるライブラリの例は、phpxmlrpcのものです。

  2. Webサーバーは、応答本文をアプリに渡す前に膨張させます。これは、Apacheのmod_deflateフィルターを使用して、inputFilterを設定することで可能です。


2

私が知っているどのブラウザからもネイティブではなく、あなたのためにそれを行うプラグインを見つける必要があります。基本的にcontent-encoding HTTPヘッダーを設定して、サーバーにリクエストの送信方法を知らせる必要があります。もちろん、サーバーはそのエンコーディングを処理できる必要があります。


0

これは許可されていません。HTTP仕様(RFC 2616)によると、Content-Encoding可能なリクエストヘッダーフィールドの1つではありません。したがって、これが発生したことをサーバーに通知する正当な方法がないため、リクエストエンティティ本体を圧縮することはできません。要求本文の圧縮は、非標準の拡張としてのみ行われます。


12
この答えは間違っているRFC 2616、具体的に言及することをIf the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type).さらにによって示さRequest and Response messages MAY transfer an entity if not otherwise restricted by the request methodContent-Encodingでオプションとして表示されているentity-header
PeterT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.