水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > application/xhtml+xml

application/xhtml+xml

2004年4月19日(月曜日)

application/xhtml+xml

「XHTML1.1 なのに Content-Type: text/html で返すのはどうだろうか」というのは既に 3回くらい言われているような気がします。もちろん仕様的には XHTML 1.1 は Content-Type: application/xhtml+xml であるべき (SHOULD) で、Content-Type: text/html であるべきではない (SHOULD NOT) というのは知っているのですが、特定のブラウザでうまく読めない (具体的には MSIE でダウンロードになってしまうという現象が発生する) ので見送っていたのでした。

なんだかたまに誤解されている方がいらっしゃるような気もするのですが、私はいつもアクセス性を重視しているのであって、別に仕様を信仰しているわけではありません (そもそも HTML は宗教ではありませんし)。ただしほとんどの場合は「仕様に忠実にマーク付けすると様々な環境でアクセスしやすくなり、アクセス性が向上する」と言えるので、結果的に仕様を重視することに繋がっているだけです。

ヨスケ全盛期から平然とフルスタイルシートのサイトを作っていましたが、それは「ヨスケでスタイルが無効になったとしても情報にアクセスできなくなるわけではないので OK」という判断なのです。

というわけなので、「仕様通りに実装すると実装上の問題が発生し、かえってアクセス性が低下する」という場合は平然と仕様を無視することがあります。そのようなことは希なのですが、application/xhtml+xml はまさにそのケースです。IE でダウンロードになってしまうのは……まあ頑張れば読めないことはないのでしょうが、それはかなり面倒ですので、事実上読めないに等しいと思います。

と、そんなこんなで放置していたのですが、どうもそれはそれで Mozilla 系で少しだけ残念な思いをしたりするようなので、とりあえず「Accept: に application/xhtml+xml を含む場合は application/xhtml+xml で応答する」という形にしてみました。

ちなみに qvalue は見ていませんので Accept: text/html, application/xhtml+xml;q=0.8 という場合でも application/xhtml+xml になりますが、そもそも厳密に言えば text/html なリソースは存在しないので、これはこれで問題ないように思います。むしろ「Accept: に application/xhtml+xml が含まれていないような古いブラウザに対しては text/html で応答する」という動作だととらえて頂ければよろしいかと思います。

あとは Vary: Accept というフィールドを送出した方が良いような気もするのですが、これをやると MSIE でキャッシュが効かなくなるという問題が出ます。※参考: [IE4]「インターネット サイト<ファイル>-<サーバー>からダウンロードできません」エラー (support.microsoft.com)[IE4]以前のページに戻ったときに画像が表示されない (support.microsoft.com)。[IE4] とありますが、IE5 以降でも同様です。また MSIE かよと言いたくなりますが……。

正しく Vary: を出力していないと、間にキャッシュサーバを挟んでいる場合などに不具合が起きる可能性があります。とりあえず様子を見ますので、不具合があるようでしたら教えて頂けるとありがたいです。

関連する話題: えび日記 / hatomaru.dll

最近の日記

関わった本など