プライベートモードで閲覧中です。

sugar pot : Content-Type(<head>~</head>はまったくよく分かってなかったりするのです)

ほろ苦い夢のかけらのおすそわけ

スポンサーサイト

--年--月--日(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
#
カテゴリ:スポンサー広告

trackback

Content-Type(<head>~</head>はまったくよく分かってなかったりするのです)

2007年02月21日(水) コメント:5 トラックバック:0

更新しないと書いたけど、疑問が出てきたのでメモ。

テキストファイルをアップロードした際のContent-Typeヘッダについてのアレコレ

サーバにアップロードした.txtファイル(内容はhtml)をwinIEで表示しようとすると、「XML ページを表示できません 」というエラーが起きてしまった件。


[2006/2/22追記]この記事、タイトルすら誤っています。<head>~</head>にかんすることではありませんでした。詳細はコメントに丁寧な説明がなされていますので、そちらをご覧ください。



あれは勝手に内容で判断するIEの仕様がおかしいだけではないかと。
Content-Type も text/plain だし、拡張子も .txt だし。(名鏡恵さん)

Zさんの示してくださったWeb標準普及プロジェクト:Content-Typeエンティティヘッダフィールドは適切なものを指定してくださいによれば、「あるHTMLファイルのソースコードを訪問者に見せたい場合はContent-Typeにtext/plainを付ければ良い、ただし、Windows版InternetExplorerはこのような挙動をせずに勝手に中身から判断することがあるので注意が必要(セキュリティ上も問題のある動作なので改善してもらいたい)」とあります。

別のページを繰ってみれば、Web標準普及プロジェクト:HTMLとして表示したい場合は必ずtext/htmlで出力してくださいでは、 「HTML文書を拡張子txtで保存してアップロードすると、一般的なWebサーバではtext/plainとして送信され、 これを受け取ったブラウザはただのプレーンテキストとして表示するのが仕様通り。 しかし、WinIEではファイルの中身からHTMLファイルとしてtext/htmlの場合と同じ表示を行う。これは誤っている」とあります。

ってことでこの挙動にようやく合点がいきましたが、その下に、「拡張子がtxtであっても、text/htmlとして送信されればブラウザはHTMLとして扱うべきであるし、他の拡張子であっても、内容に関わらず、text/plainで送信されたものはブラウザはプレーンテキストとして扱うべき」とあり、混乱してしまいました。

下の部分は本来の形(べき)であって、一般的なWebサーバの仕様は上、と理解でいいのでしょうか?

でもこれだとIEは間違いです、というのと矛盾してるような……???ともかく、htmlとして表示したい場合は「text/html」、プレーンテキストとして表示したい場合は「text/plain」と記述すれば良いのでしょうが、今回のように、htmlソースをプレーンテキストとして表示したい場合は、やはり無精せずにhtmlファイルを作成し、<body>~</body>内にソースをテキストとして記述するのが最善の方法なのでしょうね。うーん、まだまだ浅学な私なのでした(言われなくても分かるって)。


「」括弧内は要約、sugarによる。

#700
カテゴリ:103 HTML CSS JavaScript

trackback

<<Shutdown Day(シャットダウンデー) | ヤフーの転載機能が仕様変更>>

コメント(-5件)

名鏡 恵:メタタグではなくサーバのレスポンスヘッダの話をしています。

metaタグのContent-Typeはものすごく優先順位が低いです。

ローカルプロキシとかを通して通信内容を監視するとわかる(しないとわからない)のですが、
あのリンクをクリックすると、blog9.fc2.comは本体の前に

HTTP/1.x 200 OK
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Server: nginx/0.4.13
Date: Wed, 21 Feb 2007 05:15:50 GMT
Content-Type: text/plain
Last-Modified: Tue, 20 Feb 2007 06:20:55 GMT
Etag: "3f1bc32-3c06-71c61fc0"
Content-Length: 15366
Vary: Accept-Encoding,User-Agent
Content-Language: en

こういう文字列を返してきます。
 Content-Type: text/plain
ですね、
つまり、blog9.fc2.comは『これから返すものはtext/plainだよ』と言ってから内容を返却しているわけです。


サーバの役割としてはここまでで終わりです。
後はクライアント側(ユーザーエージェント)の話になります。

ユーザーエージェントがレスポンスがナニモノなのかを知るために使用できる情報は、

1.レスポンスヘッダのContent-Type
2.リソースの名前(拡張子)
3.内容そのもの
4.内容の中のメタタグのContent-Type(htmlとして解釈を開始した後のみ)

ぐらいの手がかりがありますが、
このうち1はサーバがそう指定しているのだから優先されるべきです。

1としての解釈を試みて、それができない場合に、2,3,4の情報を使用します。
この辺はサーバがどう考えても間違ったContent-Typeを送ってくることも考えられるし、
送ってこないことも考えられるし、
そこの環境では解釈できないContent-Typeかも知れないため、
ある程度は自由に、というか、個々の環境で異なった解釈がありえます。
ですが、1として解釈が可能であるならば本来は1として解釈しなくてはいけません。

で、IEは
1で text/plain といっているのに、
3をみて text/xml text/html だのに勝手に解釈する仕様になってて、それは本来誤りだよ。と。

  • 2007年02月21日(水)14:59:46
  • URL
  • 編集
sugar:メタタグは4番目だったんですね。

名鏡恵さん、ありがとうございます。

やっぱり違うモノだったんですね。どうも話が見えず、どうやったら「Content-Tye」が見えるのかとあれこれ検索したものの、検索方法が悪いのか「手がかり」を見つけられず、ここに書いたら「手がかり」を与えてくれるひとが居るかもしれない……という密かな期待もありました。おっと、「ひとに聞いたことは自分でもう一度調べ直さないとなりません」が(^^:

  • 2007年02月21日(水)15:57:41
  • URL
  • 編集
Z:省略してて済みませんでした

 名鏡 恵さんに解説して頂いたので私から補足できるようなことは殆どありませんけれど(むしろ名鏡 恵さんの方が詳しいです)、出典はRFC(Request for Comments:http://ja.wikipedia.org/wiki/Request_for_Comments)2616「ハイパーテキスト転送プロトコル -- HTTP/1.1」になると思います。

和訳資料の例:
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616

「14 ヘッダフィールド定義」のところが今回の話題になるかと。

  • 2007年02月21日(水)21:54:03
  • URL
  • 編集
名鏡 恵:です。

そもそもメタタグがタグであるということをブラウザが認識できるということは、既にHTMLとして解釈を始めてしまっている訳で、全体の処理の方針を決めるにはもう遅すぎるわけです。
文字コードとかはメタタグの指定も比較的ちゃんと考慮されますが。

  • 2007年02月21日(水)21:55:25
  • URL
  • 編集
sugar:この辺りは

理解しないでやっておりましたので、今回新たな知識となりました(身に付いているかどうかは怪しいですが、何かの折に調べる手がかりくらいは持てたと思っています)。
ありがとうございました。

  • 2007年02月22日(木)10:12:13
  • URL
  • 編集
コメントの投稿

トラックバック(-0件)

http://bittersweetdreams.blog9.fc2.com/tb.php/700-121b6e0c

Bookmarked

Blog Battler

ブログバトラー

Twitter

    フリーエリア

    上部の説明

    下部の説明

    Utilities

    Ad

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。