Accept ヘッダによるコンテントネゴシエーションを実装した。昨日 UA による振り分けでごちゃったばっかりだけど、そいつらはコメントアウト。
とりあえず設定ファイルを用意しといて、Accept ヘッダをパースし、品質を割り当て、鯖側の設定値 (qs
) と掛け合わせて一番大きいのを選ぶ。application/xhtml+xml と text/html が同じ優先値になった場合は text/html を選ぶようにしてある。これは IE が */* 送ってくる対策。Opera や Firefox は text/html の順位を少しさげてる (0.9) ので、application/xhtml+xml が選択される。
選択といっても flavor の切り替えなので問題があったりする。同じメディアタイプの flavor の扱いがアレ。コメント用 flavor (.comment) も application/xhtml+xml にしたいんだけど、これだと IE でダウンロードされてしまう。とりあえず XHTML 1.0 にして常に text/html で送信するように変えた。この辺は仕方ないというかなんというか……回避するには UA で判定してやる以外ない。flavor がメディアタイプの選択以外の役割を持っているのが悪いっちゃ悪いんだけど、他にいい方法が思いつかない。