Re: XHTML1.1のMIMEタイプ(2)

net::memoのHTTPヘッダとmeta要素の擦れ違いへの返事です。或いは前回からの続き。

meta要素のContent-Typeはサーバーに対して書かれるもので、UAに対して書かれるものではありません。それに対し、HTTPヘッダはUAに対して送信されるものです。

meta要素でContent-Typeを書くことの第一の役割は、確かにその通りと思いますが、文書中にHTMLタグの形式で記述される以上、完全にHTTPサーバのためのみの情報とは言えないのではないでしょうか。

ブラウザでソースを見れば簡単に見ることができるし、その気になればDOMでmeta要素の中からhttp-equiv="Content-Type"であるものを探し、そのcontent属性の内容を参照する、ということも可能なので、UAに対しても提供される情報のひとつではあると思います。

ですから、HTTPヘッダがtext/htmlでmeta要素がapplication/xhtml+xmlだったとしても、その文書が text/htmlとapplication/xhtml+xmlの両方に適合しているのであれば、サーバーもXHTML文書も間違っているとは言えません。サーバーがmeta要素を利用しなかっただけで、XHTML文書が嘘をついているわけではありません。

Content-Typeについて、文書がそのメディアタイプに適合しているかというのは、直接には関係ないのでは。例えば、終了タグ書き忘れミスのあるHTML/XHTML文書をContent-Type: application/xhtml+xml、またはContent-Type: text/htmlで送信することも可能ではあり、その場合、application/xhtml+xmlであればエラーを表示し、text/htmlであればエラーはある程度無視しつつそれなりに文書を整形して表示することでしょう(Mozillaの場合)。これは指定されたメディアタイプによって、ブラウザが文書の扱い方を変えた結果そうなったわけです。そのように、ブラウザ(UA)に文書をどのように扱ってほしいかを示すのが、HTTPレスポンスヘッダのContent-Typeの役割と思います。

なので、(HTTPヘッダで)Content-Type: text/htmlとして提供された文書の中に <meta http-equiv="Content-Type" content="application/xhtml+xml" /> と書いてあるというのは、文書中で「この文書はメディアタイプをapplication/xhtml+xmlとして提供してます」と書いてあることになり、やはり嘘の情報になってしまうと思います。

……と長々と述べてますが、結局のところは、

そうは言っても、meta要素だけをapplication/xhtml+xmlにすることを推奨するつもりはありません。HTTPヘッダとmeta要素の内容が食い違うのは事実で、そのような状態を好ましいとは思わないからです。

というのに賛成なのでして、好ましいと思わないからこそ、meta要素でapplication/xhtml+xmlの指定は書くべきでない、と考えるのです。

* * *

以下、2003-06-02 - Hatena::agendaでの指摘より削除……

更に言えば、「XHTML文書のメディアタイプはapplication/xhtml+xmlとすべき(should)」ということを勧めているXHTML Media Types邦訳)という文書の、正にその中で、「application/(xhtml+)xmlの文書ではmeta http-equivによる指定はすべきでない(should not)」という旨が述べられています。この一点だけでも、meta要素でapplication/xhtml+xmlの指定は書くべきでない理由としては十分、と思います。

XHTML Media Typesの勧めに従うのであれば、

とするのが最善なわけで、

というのはXHTML Media Typesの勧めるところを二つもそむいている状態であり、背くのなら背くでいい(sholud或いはshould notなので)としても、だったら何故application/xhtml+xmlなどと書くのか? 一体どちらをしたいのか? と見られかねないのではないでしょうか。

……削除ここまで

* * *

HTTPヘッダでContent-Typeが何と出力されているか、というのは、CGIスクリプトのHTTPヘッダを出力させる部分に触れたりとか、Apacheの設定を変えてみたりとか、telnetを使って手入力でHTTPリクエストを送ってみたりとかしてみないと、ただHTML文書を書いているだけではなかなかぴんとこない部分であるように思います。「meta要素でのContent-Type指定がHTTPヘッダにも反映される」というサーバの実装が必ずしも多数派でない以上、「Content-Typeはmeta要素で指定すればそれだけでOK」という誤解を文書製作者へ広めないためにも、XHTML文書にmeta要素でapplication/xhtml+xmlの指定は書くべきでないと考えます。

※ 実際には、HTTPヘッダとして出力されていなければ全く意味がないわけで。

……と、以上が仕様書などを読んで自分が考えたことなのですが、ウェブでそんな主張をしている文章はあまりないようなので不安でもあり、他のXHTML利用者のご意見をぜひ伺いたいところ。

参照

meta要素でのapplication/xhtml+xmlの指定を勧めているところ

(2003年6月1日)

北村曉 kits@akatsukinishisu.net