• ベストアンサー

HTTPヘッダはメタタグにも記述するのでしょうか?

PHPではheader関数を用いてHTTPヘッダを送信することが出来ますね。 スクリプトからHTMLを丸ごと吐き出す場合、 header関数によるヘッダ送信に併せて HTMLのメタタグでhttp-equivも記述すべきなのでしょうか。 また万一それぞれの記述が一致しない場合にはどちらが優先されるのでしょう。 初心者ながら、健全なスクリプトを目指しております。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>header関数によるヘッダ送信に併せて >HTMLのメタタグでhttp-equivも記述すべきなのでしょうか。 >また万一それぞれの記述が一致しない場合にはどちらが優先されるのでしょう。 スジ論でいえば、http-equivは、HTTPヘッダの「相当物」であって、HTTPヘッダに書いておけば、METAタグに書く必然性はないと思います。 ただし、Content-TypeはHTTPヘッダとMETAタグの両方に書くことが多いです。HTML4.01の仕様では、Charset指定は、METAタグよりもHTTPヘッダの記述を優先すべきと書いていますが、古いブラウザにはHTTPヘッダを無視するものがあります。そのようなブラウザでも文字化けせずに表示されるよう、METAタグにも記述をします。 この例のように、何らかの規格上「METAタグにも記述すべき」とはなっていないけれども、ブラウザの実装は様々なので、METAタグにも書いておいた方が安心という程度のことだと思います。私も、文字化けや、キャッシュ防止などの、重要な情報については、HTTPヘッダとMETAタグの両方に書いていました。 蛇足ですが、Content-Style-Type、Content-Script-Typeなどは、METAタグの方にのみ書くことが多いと思います。この二つは、デザイナやHTMLを作る人(HTTPヘッダを直接いじる権限が無い人)が、設定できた方が便利だという事情もあるのかなと思います。

svocm
質問者

お礼

fdsjaklfjas様の回答ではHTTPヘッダを無視するブラウザがあり、 PED02744様の回答では、メタタグを無視するブラウザがある ・・・ということは、結局両方書いておくのが一番なのですね。 Content-Style-Typeなどは、確かにHTTPヘッダに書いてあるのを 見たことがありません。 詳しい回答ありがとうございました。

その他の回答 (2)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

基本的にNo.1さんのおっしゃっているとおりかと思います。 ブラウザが認識するまでの動作=ヘッダ ブラウザが認識した後の動作=メタタグ なので、基本的には両方に書くべきです。 ただし、IEはお馬鹿なので、、、、(^_^;) 絶対に32KB分のデータは読み取ってしまうようです(笑) つまり、小さなHTMLファイルだと、META http-equivだけでは いくら no-cacheにしてても、キャッシュしてしまうということです(^_^;) ということで、MSの推奨は、 「ヘッダセクションをもう一回</BODY>の後に書いてくれ」という すごい回答です(笑) http://support.microsoft.com/kb/222064/JA/ また、http-equiv はie5等では無視されますので、IEだけがターゲットなら、ヘッダに書くだけで良いと思います。

svocm
質問者

お礼

やはり両方書いたほうが良いということですね。 ありがとうございました。 MSは、、まったくすごい回答ですね。

noname#39970
noname#39970
回答No.1

メタタグでも記述すべき 優先は・・・(どちらも正しいなら)・・・受ける時の挙動をheader送信で(物によってはDLになったりする)、受けた後の挙動(主に描画)がメタタグかと。 自信ないからここは誰かもっと詳しい人にパス・・・

svocm
質問者

お礼

ありがとうございます。 両方書いておいたほうが確実ということですね。 大手サイトのHTMLを見ていると、http-equivの記述がない場合があります。 (DTD宣言もなかったりする) こういうのは先にスクリプトから出力してるためかな、と思ったのです。

svocm
質問者

補足

一部大手サイトのHTMLにhttp-equivが記述されていない理由をご存知でしたら、 教えていただけると嬉しいです。

関連するQ&A