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を用いてレスポンステキストを出力します。

ところが、上記のように

  1. ap_rputsでレスポンス出力
  2. r->content_typeの指定

という順序で書いた場合、レスポンスの文字列がある大きさを超えた場合に、自動的にレスポンスが
チャンクとして送られてしまい、以降のcontent_typeの指定が無視されます。そのため、上記の順序で
記述した場合、自動的にtext/plainとなってしまいます。

これに気がつくのに半日かかりましたorz

教訓:Apacheモジュールでは、HTTPのヘッダをコンテンツより前に出力しよう。

考えてみれば当たり前のことですね。