PHP での HTTP レスポンスを Transfer-Enconding: Chunked から Content-Length 指定に変えたい
レンタルサーバに制作した PHP のプログラムをアップしたら表示が遅い。ブラウザから見たときだけそうなり、wget すると一瞬で取得できるのです。
Firebugs で HTTPヘッダを見てみたら、Transfer-Encoding: chunked になってました。ということはそのレスポンスのストリーム終端が検出できずに Keep-Alive がタイムアウトするまで待ってしまってるのが原因のようです。それで PHP スクリプトの最後に flush(); とか書いてみたものの特に変化は見られずでした。
そもそもチャンクなのもどうのかなぁと思っていたら、
DoCoMo のiモードコンテンツ作成時の仕様 HTTPより
http://www.nttdocomo.co.jp/service/imode/make/content/html/notice/basis/#p04
CGI作成時に「Content-Type」、「Content-Length」は必須項目となります。
とあるので、ケータイからアクセス対応も考えるとチャンクではなく Content-Length で対応しないと駄目ということです。
http://jp2.php.net/manual/ja/function.ob-get-length.php#13715 を見たところ、ズバリの答えがありました。
<? ob_start(); ?> <html> 〜〜〜〜〜 </html> <? $size=ob_get_length(); header("Content-Length: $size"); ob_end_flush(); ?>
世の中、php でケータイコンテンツ作られている事例は多々あると思うのですが、みなさんこのように実装されているのでしょうか。