Apacheモジュール開発記
こんばんは。
最近はApacheモジュール開発に勤しんでおります。
//... static int test_handler(request_rec *r) { //... ap_rputs("some text", r); r->content_type = "text/html; charset=UTF-8"; //... return OK; } //...
Content-Typeヘッダを指定するには、request_rec構造体のcontent_typeフィールドに文字列を設定します。
そして、ap_rputsや、ap_rprintfを用いてレスポンステキストを出力します。
ところが、上記のように
- ap_rputsでレスポンス出力
- r->content_typeの指定
という順序で書いた場合、レスポンスの文字列がある大きさを超えた場合に、自動的にレスポンスが
チャンクとして送られてしまい、以降のcontent_typeの指定が無視されます。そのため、上記の順序で
記述した場合、自動的にtext/plainとなってしまいます。
これに気がつくのに半日かかりましたorz
教訓:Apacheモジュールでは、HTTPのヘッダをコンテンツより前に出力しよう。
考えてみれば当たり前のことですね。