web-dev-qa-db-ja.com

Content-Type HTTPヘッダーは常に必要ですか?

この質問は、ブラウザの動作と、html、js、またはcssファイル内からcss、js、画像、その他のリソースをリンク、インポート、インクルード、またはajaxするためのプロトコル仕様に関するものです。

さまざまなブラウザで静的ファイルと圧縮コンテンツ配信をテストしているときに、従来の方法から離れると、一部のブラウザの動作が異なることがわかりました。たとえば、IE6では、すべてのインラインcssファイルやjsファイルなどにContent-Disposition: inline;ヘッダーを送信しないと問題が発生します。また、.gzのようにファイル拡張子main-styles.css.gzを使用すると、最近のバージョンのsafariでは事前に圧縮されたgzipCSSファイルが適切に処理されません。

私の質問は、Content-Type応答ヘッダーに関するブラウザの動作についてです。 <link><script>、および<img>タグはすでにリソースのコンテンツタイプを合理的に指定しているので、このヘッダーは安全にスキップできますか、それとも一部のブラウザーは何らかの歴史的な理由でそれを必要としますか?

17
Hamid Sarfraz

要するに、いいえ、それは必須ではありません。しかし、それはお勧めです。私が知っているほとんどのブラウザは、ヘッダー付きで送信されない場合、<link><script>、および<img>を適切に処理しますが、ヘッダーを送信しない本当の理由はありません。基本的に、Content-Typeヘッダーがないと、ブラウザはコンテンツに基づいて推測を試みることになります。

RFC2616から:

Content-Typeは、基になるデータのメディアタイプを指定します。
Content-Encodingを使用して、追加のコンテンツを示すことができます
通常はデータの目的でデータに適用されるコーディング
圧縮。これは、要求されたリソースのプロパティです。有る
デフォルトのエンコーディングはありません。

エンティティ本体を含むHTTP/1.1メッセージには、
その本文のメディアタイプを定義するContent-Typeヘッダーフィールド。場合
メディアタイプがContent-Typeフィールドで指定されていない場合にのみ、
受信者は、その検査を介してメディアタイプを推測しようとする場合があります
コンテンツおよび/または識別に使用されるURIの名前拡張子
資源。メディアタイプが不明なままの場合、受信者はSHOULD
タイプ「application/octet-stream」として扱います。

RFC2119で指定されているキーワードSHOULDに関して:

すべき:この単語、または形容詞「推奨」は、そこにあることを意味します
特定の状況で無視する正当な理由が存在する可能性があります
特定の項目ですが、完全な意味を理解し、
別のコースを選択する前に慎重に計量しました。

13
arcyqwerty

Javaで問題が発生し、ライブラリchrriis.dj.nativeswing.swtimpl.components.JWebBrowserを介してデータを投稿しようとしました。このライブラリは、基本的にJava内にInternetExplorerを表示します。プログラム。しかし、バックエンドの単純なphpスクリプトは、私の投稿データを解析しませんでした。 (特定のページに移動するときにWebBrowserNavigationParametersを使用して投稿データを設定しました)最終的に、phpが投稿データを適切に貼り付けるにはContent-Typeヘッダーを設定する必要があることがわかりました。 (これはデフォルトでは設定されていませんでした。)Content-Type:application/x-www-form-urlencodedに設定すると、すべて正常に機能しました。したがって、データをphpにPOSTするときは、Content-Typeの設定を常に行う必要があると思います。

1
runholen

下位互換性のために必要です。

例:Internet Explorer 10は、任意のsvgファイルをレンダリングするためにContent-Type:image/svg+xmlを必要とします

IE1IE9そしておそらく他のブラウザは常にContent-Typeヘッダーを必要とします。

1
ncomputers