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 が本流であると言えます。

7.2. application/javascript - RFC 4329

ところが先の接頭辞 x- と同様に互換のために text/javascript でも application/javascriptc でも動作することが多いようです。

現実的な JavaScript の MIME-Type の指定

互換も込みで指定しようとすると最大 3 つの書式が存在することになります。

  1. text/javascript
  2. application/x-javascript
  3. application/javascript

2006 年以降のフォーマットとしては 3 つめの application/javascript が正しいのですが、 サーバー側の設定においては、いずれの物も記述しておくのがよさそうです。 HTML やブラウザがどのようなパターンで入ってくるのか全く未知数だからです。

逆に HTML などでは極力最新の仕様に合わせて記述するようにしましょう。 昨今のユーザーエージェントなら 2006 年の RFC の仕様に対応しているはずで、 それより以前のユーザーエージェントを考慮することは技術の発展を遅らせかねません。

WordPress は text/script

かなり利用者数の多い WordPress も 2015 年現在で最新のバージョン 4.2 系で text/javascript を採用しています。 こういったメジャーなソフトウェアが対応しない限り、互換を維持せざるを得ないと思います。