0

gzipサーバーにデータを送信しているときに、デフォルトでエンコードを有効にしているように見えるアプリがあります。

gzip以下を明示的に使用して、圧縮を無効にしてみました。

IXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"")(もちろん、HTTPリクエストオブジェクト上で)

これはまだ役に立たないようです。C ++アプリのHTTP-Requestヘッダーで有効になっているGZIPを無効にする方法はありますか?

ありがとう!

4

1 に答える 1

1

特定のエンコーディングを使用しないようにサーバーに要求するには、値のリストを提供する必要がありますAccept-EncodingRFC2616 (HTTP/1.1)のセクション 14.11 から、次のいずれかの形式があることがわかります (値は例です)。

Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

content-coding が Accept-Encoding フィールドにリストされている content-codings の 1 つである場合、qvalue が 0 でない限り、受け入れられます (セクション 3.9 で定義されているように、0 は「受け入れられない」ことを意味します)。

次に、サーバーに圧縮を使用しないように要求gzipするには、空の文字列の代わりに、次の値を指定する必要がありますAccept-Encoding

gzip;q=0

これには、サーバーがそれを使用しないようにする必要がありますが、別のエンコーディングを提供する必要があります。利用可能なエンコーディングについては、セクション 3.5 を参照してください。品質qパラメーターを使用して、サーバーに好みを通知します (要求に対してそのエンコーディングを提供できない場合、サーバーはエラー 406 で応答することを忘れないでください)。

identity;q=1.0, gzip=0.5

このようにして、エンコーディングを使用するように要求しidentity、それが利用できない場合は、エンコーディングも受け入れることができgzipます (これにより、何らかの理由でリクエストに他のエンコーディングを使用できない場合に、サーバーがエラーで応答するのを防ぐことができます)。 )。他のエンコーディングのパフォーマンスも試すことができます (たとえば、compressおよび)。deflate

コード
最後に、 を使用する必要がありますIXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"identity;q=1.0, gzip=0.5")SetRequestHeader では、デフォルトで送信されるヘッダーへの追加であることがわかります。そのため、空の文字列を指定すると、実際には値は変更されません (実際、どのように解釈されるかはサーバーに依存する可能性があります。これに関する適切な仕様は見つかりませんでした) 、実際に送受信されたものを確認するために HTTP リクエストとレスポンスの両方を調べることができます)。

古い値:Accept-Encoding: compress
呼び出し:IXMLHttpRequest2::SetRequestHeader(L"Accept-Encoding", L"")
新しい値:Accept-Encoding: compress

于 2013-03-06T08:22:16.063 に答える