text / javascriptではなくJavaScript MIMEタイプapplication / javascriptを使用する場合


157

Internet Explorerが理解できるように、IE機能しないjQueryコードtext/javascriptがHTMLドキュメントで使用されるという質問に基づいています。

しかし、いつapplication/javascriptを使用しtext/javascriptますか?さらに重要なことに、なぜの代わりにそれを使用するのでしょうか?


可能デュープ/解説:stackoverflow.com/questions/876561/...
ベン



回答:


243

よると、理論的にはRFC 4329application/javascript

それが想定されている理由はapplication、型が読み取り可能か実行可能かには関係ありません。これは、汎用charsetパラメーターだけでなく、言語/タイプ自体によって規定されたカスタム文字セット判別メカニズムがあるためです。のサブタイプはtext、プロキシによって別の文字セットにトランスコードして、文字セットパラメータを変更できる必要があります。これはJavaScriptには当てはまりません。

a。RFCによると、ユーザーエージェントはスクリプトでBOMスニッフィングを行ってタイプを判別する必要があります(ただし、実際にこれを行うブラウザーがあるかどうかはわかりません)。

b。ブラウザーは他の情報(ページのエンコーディングや一部のブラウザーではscript charset属性など)を使用して文字セットを決定します。そのため、リソースをトランスコードしようとしたプロキシは、ユーザーを破壊します。(もちろん、実際には、とにかく誰もトランスコーディングプロキシを使用することはありませんが、それが目的でした。)

したがって、ファイルの正確なバイトが保存されなければならないまさにそれがバイナリになりた、applicationタイプではなく、技術的に文字ベースtext

同じ理由で、application/xmlが公式に優先されtext/xmlます。XMLには独自の帯域内文字セットシグナリングメカニズムがあります。そして誰もapplicationがXMLを無視しています。

text/javascriptそしてtext/xml公式正しいことではないかもしれないが、そこに誰もが、互換性のために、今日使用するものであり、彼らは正しいことじゃない理由は、実質的に完全に重要でない話しています。


4
最も「互換性のある」解決策は、応答にコンテンツタイプをまったく含めないことです。RFCは、明示的なコンテンツタイプがない場合、レシーバーはそれを「コンテキストによって」解釈することを述べています。これは、最初のブラウザーからすべてのブラウザーに対して常に正しい動作です
Pacerier

application/javascriptIEをとの互換モードで実行する場合は注意してくださいIE=8。インラインスクリプトが適切に評価されていないようです。text/javascriptそこでうまくいきます。
Joscha 14

2
@Pacerier-私はこのコメントが5歳であることを知っていますが、今日はセキュリティ上の理由から、特にフォーラムタイプのWebサイトの場合は、MIMEタイプを含めるのが最善です。受信者にタイプを解釈させると、悪意のあるjavascriptファイルを画像としてアップロードし、ブラウザにそのスクリプトを解釈させて実行させることで、攻撃の余地が残ります。サーバーがすべての応答に対してMIMEタイプを返し、ヘッダーX-Content-Type-Options: nosniffを使用してブラウザーがタイプを解釈しないようにすることをお勧めします。
sammy_winter 2018

@sammy_winterどこでもこのような警告が表示され、毎回うんざりしています。ユーザーがコンテンツをアップロードすることを許可した場合、おそらく「ああ、名前はpngファイルの正規表現に一致しました。信頼できます」よりも多くの検証を行うでしょう。不正なヘッダーが「セキュリティの問題」になる場合、問題はどこかもっと深いと思いませんか?これは、Server: nginx非表示またはnginxが送信するものと同じです。まるで、穴を見つけることができる人は、実行しているサーバーを知るために明示的なヘッダーが必要であるかのように...
Sahsahae

17

JavaScriptのMIMEタイプの問題は、何年も標準が存在していないことです。これで、application / javascriptが公式のMIMEタイプとして取得されました。

しかし実際には、ブラウザがタイプ自体を判別できるため、MIMEタイプはまったく問題になりません。そのため、HTML5仕様では、type="text/javascript"は不要であるとされています。


5

applicationなぜなら.js-filesは、ユーザーが読みますが実行されるはずです何かしたい、何かではありません。


それは公式の答えですが、IEはそれを窒息させています。
ベン

20
@ベン:多分、IEユーザーは正しく実行されないためにすべてのJSファイルを読む必要があるからでしょうか?少なくとも、それはマイクロソフトによって正直です;)
thejh

あなたのコメントを愛し、私たちはそれに対処する必要がありますので、残念ながらjavascriptを読むことができない人々はまだIEを使用:(。
マーク・Baijens

1
あなたがそれを読みたいかどうかは、理由とは関係がないと思います。それは、データがどのようにトランスコードされるか、またはそうであるかどうかに関係しています。
Zenexer 2013

技術的には、HTMLとCSSもブラウザーによって「実行」(解析)され、コードの結果をビジュアルコンテンツとして生成します。ユーザーがコードを「読み取る」ことを意図していないため、この回答はあまり意味がありません。「テキスト」とは何か、「アプリケーション」とは何かについて、大きな混乱があると思います。この件に関して投票できた場合、IETFは「テキスト」のコンテンツをtext、および「イメージ」や「ドキュメント」などの上記のタイプの「目的」のbinaryいずれかと見なす必要がありますapplication

1

application / javascriptは使用する正しいタイプですが、IE6-8ではサポートされていないため、text / javascriptのままです。妥当性を気にしない場合(HTML5を除く)、タイプを指定しないでください。


どこで手に入れたの?私はそれがサポートされていると確信しています。または、少なくとも、無視されます。
Zenexer 2013年

@Zenexerは別の質問に対する彼の回答を読みました。どうやらIEの互換性はないことを意味しapplication/javascriptます。
Camilo Martin、

@CamiloMartin IEで常に6まで使用できます。デフォルトはJavaScriptです。
Zenexer 2013

@Zenexer Hm、奇妙です。他のQ&Aで何が問題だったのかしら。
Camilo Martin、

@Zenexer私がこれに対処しなければならなかったので久しぶりですが、これがIE6-8で問題引き起こすこの他のいくつかの説明です。なぜこれが時々問題になるように見えるのか完全にはわかりませんが、私の経験では問題を引き起こしています。
Radu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.