JSの MIME-Type は text か application か、x- は必要か
サーバ設定などで MIME-Type を指定することがありますが、検索して資料を探さすと、盲目的にコピペをさせるようなものが多く見つかります。
特に text/
なのか application/
なのか定かでなかったり、接頭辞(prefix) x-
が必要なのか不要なのか定かではないものが多くあります。
ここでは JavaScript を例に MIME-Type について調査した結果を紹介します。
接頭辞(prefix) x- は標準化されない MIME-Type である
いくつかの MIME-Type は接頭辞 x-
が与えられますが、これは標準化されていない MIME-Type に与えられるべきものであるようです。
IETF が発行する RFC の資料には次のようなものが挙げられます。
Implementors may, if necessary, define private Content-Transfer- Encoding values, but must use an x-token, which is a name prefixed by "X-", to indicate its non-standard status, e.g., "Content-Transfer- Encoding: x-my-new-encoding".
端的に言えば独自のエンコードには x-
を付けなさいというルールが 1996 年に標準化推奨団体によって定義されているということです。
JavaScript に x- 接頭辞は必要か
JavaScript は x-javascript
としているものと単に javascript
としているものがありますが、
JavaScript は既に定義された MIME-Type ですから、厳密には接頭辞 x-
は不要です。
ところが実用面になると、互換のために接頭辞 x-
に対応しているケースが存在するため、
x-javascript
が適切に設定され、機能している(ように見える)ことがあります。
JavaScript は application/ が新しい text/ が古い形式
特に JavaScript に関しては application/javascript
としているものと、text/javascript
としているものが混在しています。
JavaScript は 2006 年に MIME-Type が定義されていますから、厳密には application/javascript
が本流であると言えます。
ところが先の接頭辞 x-
と同様に互換のために text/javascript
でも application/javascriptc
でも動作することが多いようです。
現実的な JavaScript の MIME-Type の指定
互換も込みで指定しようとすると最大 3 つの書式が存在することになります。
text/javascript
application/x-javascript
application/javascript
2006 年以降のフォーマットとしては 3 つめの application/javascript
が正しいのですが、
サーバー側の設定においては、いずれの物も記述しておくのがよさそうです。
HTML やブラウザがどのようなパターンで入ってくるのか全く未知数だからです。
逆に HTML などでは極力最新の仕様に合わせて記述するようにしましょう。 昨今のユーザーエージェントなら 2006 年の RFC の仕様に対応しているはずで、 それより以前のユーザーエージェントを考慮することは技術の発展を遅らせかねません。
WordPress は text/script
かなり利用者数の多い WordPress も 2015 年現在で最新のバージョン 4.2 系で text/javascript を採用しています。 こういったメジャーなソフトウェアが対応しない限り、互換を維持せざるを得ないと思います。