このApacheの振る舞いを理解する手助けをしてくれれば本当にありがたいです。
application / jsonのiPhone Objective-CアプリからPHPと通信しています。Gzip圧縮はサーバーで有効になっており、クライアントによって要求されます。
私の.htaccessから:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/json
小さなリクエストの場合、Apacheは 'Content-Length'ヘッダーを設定しています。例(これらの値は、Objective-Cのヘッダーから出力されます):
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 185; <-------------
"Content-Type" = "application/json";
Date = "Wed, 22 Sep 2010 12:20:27 GMT";
"Keep-Alive" = "timeout=3, max=149";
Server = Apache;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.2.13";
"X-Uncompressed-Content-Length" = 217;
X-Uncompressed-Content-Lengthは、非圧縮JSON文字列のサイズにセットを追加するヘッダーです。
ご覧のとおり、この要求は非常に小さい(217バイト)。
大きなリクエスト(282888バイト)のヘッダーは次のとおりです。
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Type" = "application/json";
Date = "Wed, 22 Sep 2010 12:20:29 GMT";
"Keep-Alive" = "timeout=3, max=148";
Server = Apache;
"Transfer-Encoding" = Identity;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.2.13";
"X-Uncompressed-Content-Length" = 282888;
Content-Lengthが指定されていないことに注意してください。
私の質問:
- なぜApacheはより大きなリクエストに対してContent-Lengthを送信しないのですか?
- 'Contend-Encoding = gzip'が設定されているという事実は、サイズの違いを確認できない場合でも、gzip圧縮がより大きなリクエストでまだ機能していることを意味しますか?
- ユーザーにデータ使用量をより正確に報告するために、Apacheにこれらの大きなリクエストの実際のContent-Lengthを含める方法はありますか?
このアプリは高価なデータプランで使用できます。したがって、ユーザーに実際の使用状況を報告します。30〜70%の使用量の増加ではありません(数百KBの追加はあまり聞こえないかもしれません。 MBあたり10ドル!)。
前もって感謝します。