[1] [DFN[[CODE(MIME)@en[[[text/javascript]]]]]] は、
[[JavaScript]] の [[MIME型]]です。

* 仕様書

[REFS[
- [61] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-12-29 06:24:12 +09:00]] 版) <https://html.spec.whatwg.org/#dependencies>
- [37] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-09-03 15:16:48 +09:00]] 版) <https://html.spec.whatwg.org/#javascript-mime-type>'''
]REFS]

* JavaScript MIME 型

[25] [[JavaScript]] の [[MIME型]]はいろいろありますが、そのうち、
[CODE(MIME)@en[[[text/javascript]]]] を常に使うべきです。

[88] [CODE[script]] [[要素]]については [CODE[type][<script type>]] [[属性]]の項を参照。

[87] [[サーバー]]は、 [[JavaScript]] に [CODE[text/javascript]]
を使う[SHOULD[べき]]です。それ以外の [[JavaScript MIME型]]を使う[SHOULD[べきではなく]]、
その他の [[MIME型]]を使っては[MUST[なりません]]。 [SRC[>>37]]

[HISTORY[
[60] 長らくこのことを明確に規定した[[仕様書]]は存在していませんでした。
[CITE[HTML Standard]] は 「[[RFC 4329]] は [CODE(MIME)@en[[[text/javascript]]]]
を[[廃止]]しているが、実際には最も良く用いられる [[MIME型]]なので、
本[[仕様書]]では [CODE(MIME)@en[[[text/javascript]]]] を用いる」
[SRC[>>61]]
としています。 ([[仕様書]]内で使うと述べるだけで[[著者]]にそれを要求していなかったのは、
[[JavaScript]] の[[仕様書]]が規定するべきで [[HTML]] が規定するべきではないとの立場なのでしょうか。)
]HISTORY]

[38] [DFN[[RUBYB[JavaScript MIME型]@en[JavaScript MIME type]]]]は、次のものです [SRC[>>37]]。
いずれも [[JavaScript]] を表します [SRC[>>37]]。

[FIG(middle list)[ [71] [[JavaScript MIME型]]
- [CODE(MIME)@en[[[application/ecmascript]]]]
- [CODE(MIME)@en[[[application/javascript]]]]
- [CODE(MIME)@en[[[application/x-ecmascript]]]]
- [CODE(MIME)@en[[[application/x-javascript]]]]
- [CODE(MIME)@en[[[text/ecmascript]]]]
- [CODE(MIME)@en[[[text/javascript]]]]
- [CODE(MIME)@en[[[text/javascript1.0]]]]
- [CODE(MIME)@en[[[text/javascript1.1]]]]
- [CODE(MIME)@en[[[text/javascript1.2]]]]
- [CODE(MIME)@en[[[text/javascript1.3]]]]
- [CODE(MIME)@en[[[text/javascript1.4]]]]
- [CODE(MIME)@en[[[text/javascript1.5]]]]
- [CODE(MIME)@en[[[text/jscript]]]]
- [CODE(MIME)@en[[[text/livescript]]]]
- [CODE(MIME)@en[[[text/x-ecmascript]]]]
- [CODE(MIME)@en[[[text/x-javascript]]]]
]FIG]

;; [27] この一覧は、 >>31 の [[JSON]] 形式のデータファイルに含まれています。
[CODE[scripting_language]] 欄の値が [CODE[javascript]] なら、
[[JavaScript MIME型]]です。
[REFS[
- [30] [CITE@en[data-web-defs/mime-types.txt at master · manakai/data-web-defs]] ([TIME[2015-09-03 21:50:01 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/doc/mime-types.txt>
- [31] [CITE@en[data-web-defs/mime-types.json at master · manakai/data-web-defs]] ([TIME[2015-09-03 21:49:33 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/data/mime-types.json>
]REFS]

[33] [[JavaScript]] に関してこれ以外の[[MIME型]]に対応しては[['''なりません''']]
[SRC[>>37]]。

[28] [[利用者エージェント]]は、 [CODE(HTMLe)@en[[[script]]]]
[[要素]]の処理でこの [[JavaScript MIME型]] すべてを認識しなければ[['''なりません''']] [SRC[>>37]]。

;; [59] これは [CODE(HTMLe)@en[[[script]]]] [[要素]]の [CODE(HTMLa)@en[[[type]]]]
[[属性]]や [CODE(HTMLa)@en[[[language]]]] [[属性]]の値の解釈に関する規定です
([[スクリプトの媒体型]]も参照)。[[外部スクリプト]]の [[HTTPヘッダー]]
[CODE(HTTP)@en[[[Content-Type:]]]] の[[MIME型]]は、原則として無視されます。
([CODE(HTTP)@en[[[X-Content-Type-Options:]] [[nosniff]]]] [[ヘッダー]]が指定された場合には、
[[JavaScript MIME型]]かどうかの検査も行われます。)

;; [32] [[JavaScript MIME型]]を認識することは求められていますが、
[[JavaScript]] 自体を実装することは[[仕様書]]上は要求されていません。
もっとも [[Web互換性]]のためには [[JavaScript]] を実装する必要があります。

[HISTORY[
[29] [[JavaScript]] の [[MIME型]]がこうも増殖してしまったのは、
数々の歴史的不幸が重なったためです。

- [62] 元々 [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[スクリプト言語]]は
[CODE(HTMLa)@en[[[language]]]] [[属性]]で判別することとなっており、
これは [[MIME型]]ではありませんでした。それが後に [[W3C]] で標準化された際、
[[スクリプト言語]]の識別には [[MIME型]]を使うのが[[政治的に正しい]]と考えられたため、
広く普及していた [CODE(HTMLa)@en[[[language]]]] [[属性]]を[[非推奨]]とし、
新たに [CODE(HTMLa)@en[[[type]]]] [[属性]]を導入しました。
[[仕様書]]が求めていたわけではありませんが、実装によっては (後に [[HTML5]] により標準化)、
[CODE(HTMLa)@en[[[type]]]] [[属性]]が存在しないとき、
[CODE(HTMLa)@en[[[language]]]] [[属性]]の値の前に
[CODE(MIME)@en[text/]] をつけた [[MIME型]]が指定されたものとみなすこととしました。
そのため [CODE(HTMLa)@en[[[language]]]] [[属性値]]のバリエーションが
[[MIME型]]のバリエーションとなりました。
- [63] 00年代半ば頃まで [[IETF]] は [[MIME型]]の増加を抑制する方針を採っていました。
新たな [[MIME型]]の登録は難しく、実世界のみならず [[W3C]] も、
[[IANA登録簿]]に登録されていない [[MIME型]]を勝手に使っていました。
中央登録簿が機能しないため、各地で同じ意味の異なる値が独立して使われました。
- [64] 00年代半ば頃に失敗を認めるまで [[IETF]] は未登録の [[MIME型]]に
[CODE[[[x-]]]] を付けさせる方針を採っていました。 [[MIME]]
に関する知識がある人達は、 [CODE[[[x-]]]] のない [[MIME型]]を使うことを忌避し、
[CODE[[[x-]]]] をつけた値を使うようにしました。そのため [CODE[[[x-]]]]
付きと [CODE[[[x-]]]] なしのバリエーションが生まれました。
- [65] [CODE(MIME)@en[[[text/*]]]] を[[プログラミング言語]]に用いるべきではないとの
[[IETF]] の[[神話]]があり、 [CODE(MIME)@en[[[application/*]]]] 
を使うのが好ましいと考え、実践する人達がいました。そのため
[CODE[text/]] と [CODE[application/]] のバリエーションが生まれました。
- [66] この言語は元々 [[LiveScript]] と呼ばれていましたが、
[[マーケティング]]上の理由から [[Sun]] の[[商標]]を含む [[JavaScript]]
に改称されました。それをそのまま使うことが憚られ、 [[Microsoft]]
は [[JScript]]、 [[ECMA]] は [[ECMAScript]] と呼ぶことにしました。
当時の言語の非互換性から [[JScript]] と [[JavaScript]] は異なるものだと主張する人もいましたし、
中立の [[ECMAScript]] と呼ぶべきだとする人もいました。
- [67] 当初の [[JavaScript]] にはバージョン番号があり、
[CODE(HTMLa)@en[[[language]]]] [[属性]]や [CODE(HTMLa)@en[[[type]]]]
[[属性]]の値で区別していました。この区別はあまり有効に機能せず、
00年代までに廃止されていますが、それまでに色々な値が生まれました。
改版のたびに [[MIME型]]が増殖するのはけしからんと [CODE(MIME)@en[[[version]]]]
[[属性]]や [CODE(MIME)@en[[[e4x]]]] [[属性]]が作られたりもしました
(いずれも現在は使われていません)。
- [69] 元々 [CODE(HTMLa)@en[[[language]]]] [[属性]]しかなかったためか、
[[Netscape]] は [[JavaScript]] の公式な [[MIME型]]を明確に定めませんでした。
- [93] [[Netscape]] の[[サーバー]]は [CODE[application/x-javascript]]
を採用していましたが、 [[Netscape]] も開発に参加していた [[W3C]]
の [[HTML4]] は [CODE[text/javascript]] を採用しました。
その [[W3C]] も [[SVG]] では [CODE[text/ecmascript]] を採用しました。
- [68] 混乱を収拾するべく(?) [[IETF]] は [[RFC 4329]] を出版しますが、
曖昧で網羅性も不十分なものでした。しかも、最も広く用いられていた
[CODE(MIME)@en[[[text/javascript]]]] を >>65 より[[廃止]]扱いにしました。
一般世間はほとんど無視しましたが、一部の[[仕様書]]を尊重する人達がそれに従い、
かえって混乱の種を蒔くこととなりました。
- [92] 
[CODE[script]] [[要素]]から参照されている [[URL]]
にアクセスしたとき[[応答]]で指定される [[MIME型]]は、
[[JavaScript]] (または [CODE[language]] [[属性]]で指定された他の[[スクリプト言語]])
であることが明白であり、[[Webブラウザー]]はその検査を行いませんでした。
鶏が先か卵が先か、[[MIME型]]を正しく設定しない[[サーバー]]も多く、
[[Web互換性]]のため今でもこの検査を完全には行えていません。

[94] この混乱は [[HTML5]] が状況を整理するまで続きました。

]HISTORY]

[91] 他に [[Node.js]] の[[モジュール]]用の [[MIME型]]として
[CODE[application/node]] があります。


* text/javascript

[40] [[W3C]] [[HTML]] 
の仕様書に登場しますし、実際にもかなり使われています。

IANAREG には登録されていません。

application/javascript 媒体型 に対応します。 (See also
[[text/*媒体型に対応するapplication/*媒体型]])

,charset	,mime.charset	,省略可	,[[MIME]]・[ID] (See [[charsetパラメーター]])
,version	,	,省略可	,[ID]

[HISTORY[
[109] 
[[RFC 4329]] は [[JavaScript]] (非[[ECMAScript]]) の[[MIME型]]としつつ、
[RUBYB[[[廃止]]][obsolete]]としていました [SRC[>>110]]。

[111] 
一部の好事家を除き、完全に無視されていました。

[145] 
[[RFC 9239]]
は、
[CITE[HTML Standard]]
が
[CODE[text/javascript]]
を採用したことを理由に、
[[廃止]]処分を撤回しました。
[SRC[>>107]]

]HISTORY]

[106] [[CEA-2014-B]]

* text/ecmascript

[39] [[SVG]] 1.0 が初見です [ID]。
[[ECMAScript]] ([[ECMA]] 262)
は ECMA によって標準化された [[JavaScript]] です。

[HISTORY[
[114] 
[[IANAREG]] には長らく登録されていませんでした。
]HISTORY]

[HISTORY[
[117] 
[[RFC 4329]] は [[ECMAScript]] の[[MIME型]]としつつ、
[RUBYB[[[廃止]]][obsolete]]としていました [SRC[>>110]]。

[151] 
[[RFC 9239]]
は、
[[廃止]]された [[ECMAScript]] 系 [[MIME型]]の代表をこれとしました。
[SRC[>>107]]


]HISTORY]

[115] 
[[WinIE]] は [[JScript]] として解釈します。

,charset	,mime.charset	,省略可	,[[MIME]]・[ID] (See [[charsetパラメーター]])
,version	,	,省略可	,[ID]

* [CODE[text/x-ecmascript]]

[HISTORY[
[133] 
[[RFC 4329]]
は
[CODE[text/x-ecmascript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[154] 
[[RFC 9239]]
は、
[CODE[text/ecmascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]



* text/jscript

[41] [[Microsoft]] の [[JScript]] (JavaScript の亜種)
に使われることがある媒体型です。 IANAREG には登録されていません。

IE が解釈出来ます。
([[名無しさん]] [WEAK[2004-03-17 00:38:07 +00:00]])

[HISTORY[
[130] 
[[RFC 4329]]
は
[CODE[text/jscript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[149] 
[[RFC 9239]]
は、
[CODE[text/javascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]


[23] [CODE(MIME)[[[application/x-ms-jscript]]]] というのを見ました。 WinIE が解釈できるのかは不明。
([[名無しさん]] [WEAK[2004-03-20 03:54:55 +00:00]])

* text/livescript

[24] [[LiveScript]] は [[JavaScript]] の古称です。
受信側実装で対応しているものがありますが、実際に使用している文書や送信側実装があるのかはわかりません。
[[IANAREG]] には登録されていません。

[HISTORY[
[131] 
[[RFC 4329]]
は
[CODE[text/livescript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[150] 
[[RFC 9239]]
は、
[CODE[text/javascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]


]HISTORY]

* text/x-javascript

[42] [[Netscape Navigator]] が解釈できるようです。

[43] >>42 手元にある [[NN]] では確認出来ません。 
[[ScriptTest]] 参照。

[HISTORY[
[132] 
[[RFC 4329]]
は
[CODE[text/x-javascript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[146] 
[[RFC 9239]]
は言及していますが、なぜか
[CODE[text/javascript]]
の別名にはしていません。
[SRC[>>107]]


]HISTORY]

* application/ecmascript

[44] 実際に幾らか使用されているようです。

[HISTORY[
[116] 
長らく [[IANAREG]] には登録されていませんでした。
]HISTORY]

[HISTORY[
[118] 
[[RFC 4329]] は [[ECMAScript]] の[[MIME型]]として規定していました [SRC[>>110]]。


[152] 
[[RFC 9239]]
は、
[CODE[text/ecmascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]


* application/javascript

[45] text/javascript に対応する媒体型です。
[[text/*媒体型]], [[application/*媒体型]]の定義からすると、
application/javascript の方を使うべきですが、旧来の実装は
text/javascript にしか対応していないものが少なくないですから、
application/javascript は LIMITED USE とされています [ID]。

[HISTORY[
[112] [[IANAREG]] には長らく登録されていませんでした。
]HISTORY]

[HISTORY[
[113] 
[[RFC 4329]] が [[JavaScript]] (非 [[ECMAScript]]) の
[[MIME型]]として規定していました [SRC[>>110]]。

[146] 
[[RFC 9239]]
は、
[CODE[text/javascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]

,charset	,mime.charset	,省略可	,[[MIME]]・[ID] (See [[charsetパラメーター]])
,version	,	,省略可	,[ID]

* application/x-ecmascript

[48] 受信側実装で対応している
ものがありますが、実際に使用している文書や送信側実装が
あるのかはわかりません。 

[HISTORY[
[134] 
[[RFC 4329]]
は
[CODE[application/x-ecmascript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[153] 
[[RFC 9239]]
は、
[CODE[text/ecmascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]

* application/x-javascript

[49] [[Apache]] HTTP server などが使用しています。 application/javascript
と同義であり、そう扱うよう [ID] は要請しています。

[50] [[Mozilla]] は対応しています。

[51] Mozilla のソースでは [CODE[application/x-javascript]] が主流で、 [CODE[text/javascript]] もよく使われています

[22] [[VRML]] では [[JavaScript]] の[[媒体型]]は
[CODE(MIME)@en[application/x-javascript]]
と規定しています。
[SRC[>>26]]


[HISTORY[
[135] 
[[RFC 4329]]
は
[CODE[application/x-javascript]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[147] 
[[RFC 9239]]
は、
[CODE[text/javascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]


[REFS[
- [26] [CITE[VRML97, ISO/IEC 14772-1:1997 -- Annex C, ECMAScript Scripting Reference]] <http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/javascript.html#MIMEtype>
]REFS]

* text/javascript[VAR[N]].[VAR[N]]

[52] [[WinIE]] が対応しています。

[128] 次の種類が確認されています。

[FIG(middle list)[
- [DFN[[CODE[text/javascript1.0]]]]
- [DFN[[CODE[text/javascript1.1]]]]
- [DFN[[CODE[text/javascript1.2]]]]
- [DFN[[CODE[text/javascript1.3]]]]
- [DFN[[CODE[text/javascript1.4]]]]
- [DFN[[CODE[text/javascript1.5]]]]
]FIG]

[HISTORY[
[129] 
[[RFC 4329]]
は
[CODE[text/javascript1.0]],
[CODE[text/javascript1.1]],
[CODE[text/javascript1.2]],
[CODE[text/javascript1.3]],
[CODE[text/javascript1.4]],
[CODE[text/javascript1.5]]
に言及していました。
[RUBYB[[[非推奨]]][discouraged]]としていました。
[SRC[>>110]]

[148] 
[[RFC 9239]]
は、
[CODE[text/javascript]]
の[RUBYB[[[非推奨]]の別名][deprecated alias]]に改めて [[IANAREG]]
に登録しました。
[SRC[>>107]]

]HISTORY]

* 引数

[15] [CODE(MIME)[text/javascript]] では、
少なくても2つの引数が知られています。

,名前	,値	,既定値	,意味
,[CODE(MIME)[[[charset]]]]	,[CODE(ABNF)[charset]]	,(プロトコル依存)	,[[文字コード]]
,[CODE(MIME)[[[version]]]]	,"不明 ([CODE(ABNF)[1*[[DIGIT]] \".\" 1*DIGIT]] か?)"	,(実装依存)	,JavaScript の版
,[CODE(MIME)@en[[[e4x]]]]

[17] きちんと定義した仕様が無いので、
未知の引数・引数値に遭遇した時の実装の振舞いは予測不能です。

実装によっては、引数の存在自体や引数の順序、
引数指定内での[[空白]]の挿入・引数名や引数値の大文字・小文字などで不具合が生じる虞もあります。

[18]
[CODE(MIME)[version]] 引数は多くの実装では無くても実装している適当な版で処理されますから、
どうしても必要でなければ省略するのがよいと考えられます。

[CODE(MIME)[charset]] 引数は、他の媒体型やプロトコルとの関係により、
たとえば [[MIME]] や [[HTTP]] では必ず指定し、
[[HTML]] では指定しないのがよいと思われます。

その他の引数はできれば指定しないのがよいでしょう。

** [CODE[charset]] 引数

[SEE[ [[JavaScriptにおける文字コード]] ]]

** version パラメーター

[21] JavaScript または ECMAScript の版を書きます。
どういう値を取るのかや既定値は規定されていません [ID]。

[53] [[Mozilla]] 1.3a で確認したところ、値が
[CODE(ABNF)["1".("0"/../"5")]] なら script が実行されます。

[54] >>53 [CODE[text/javascript]] と [CODE[application/x-javascript]] での話。

[137] 
[[RFC 4329]]
は、
[CODE[application/ecmascript]]
に
[CODE[version]]
が指定された場合、指定されていない場合と同じように処理しては[MUST[ならない]]としていました。
[SRC[>>110]]

[138] その規定に従った実装が実在したかは不明です。

[139] [[JavaScript 2.0]] ([[ES4]]) のような将来の[[非互換変更]]を含んだ [[ECMAScript]]
仕様への対応のための布石という意味合いがあったものと推測されます。

* JavaScript モジュール

[105] 
[[Node.js]]
では[[モジュール]]に
[CODE[application/node]]
を使っています。

[HISTORY[

-[155] 
[CITE@en[Add `application/javascript+module` mime to remove ambiguity · Issue #322 · tc39/ecma262 · [[GitHub]]]], [TIME[2022-11-22T09:42:21.000Z]] <https://github.com/tc39/ecma262/issues/322>
- [156] [CITE@en[add `+module` to mime type for `script type=module` · Issue #558 · whatwg/html · GitHub]], [TIME[2022-11-22T09:42:53.000Z]] <https://github.com/whatwg/html/issues/558>



[144] 
[[RFC 9239]]
は
[CODE[text/javascript]]
等の [[MIME型]]で[[モジュール]]も使うことができる
([[古典スクリプト]]と [[MIME型]]では区別できない)
としていました。
[SRC[>>107]]
]HISTORY]

* 素片識別子

[SEE[ [[素片識別子]] ]]

* 例

[16] [[HTML]] の [CODE(HTMLe)[[[script]]]] 要素で使用してみる例:
[PRE(HTML)[
<script type="text/javascript" src="script.js"/>
]PRE]

版引数つきの例:
[PRE(HTML)[
<script type="text/javascript; version=1.3" src="script.js"/>
]PRE]

[19] [[HTTP]] や [[MIME]] の[[実体]]として JavaScript
を送る例:
[PRE(MIME)[
[[Content-Type]]: text/javascript; charset=[SAMP(charset)[iso-2022-jp]]
[[Content-Disposition]]: [[attachment]]; [[filename]]=[SAMP(file)[script.js]]
var i = 0;
]PRE]

[20] [CODE(file)[[[.htaccess]]]] で[[接尾辞]] [CODE(file)[.js]]
と [CODE(MIME)[text/javascript]] を関連付ける例:
[PRE[
[[AddType]] text/javascript .js
]PRE]

* 歴史

** [CODE(MIME)@en[text/javascript]]

[10] (要調査: [CODE(MIME)[text/javascript]] の初出は HTML 3 Scripting draft または HTML 4 draft でしょうか。)

[14] JavaScript 関連の媒体型を遅ればせながら IANAREG
に登録するための [[Internet Draft]] も書かれましたが、
残念ながら成立にはいたっていません。

(TODO: I-D の名前は?)

[8] JavaScript 系の媒体型を一挙に登録する試みも上手く行かなかったみたいだし、このまま非標準の歴史的媒体型名としてゆくゆくは消えるんだろうか?

[9] まあ当分は生き残り続けると思われるけど。

*** text/javascript が好ましくない n 個の理由

[11] [CODE(MIME)[text/javascript]] は、しばしば望ましくないとされます。

[12] '''そもそも JavaScript を使うなどけしからん''':
JavaScript は Web の[[可接性]]やしばしば[[可用性]]を損なうので使用するべきではないとの意見があります。
しかし、 JavaScript を使うかどうかと、使う時にどういう名前でラベル付けするかは別の次元の問題です。

[2] '''[[IANAREG]] [WEAK[(媒体型に関する IANA 登録簿)]] に登録されていない''':
[CODE(MIME)[text/javascript]] は現時点で IANAREG
に登録されていません。媒体型を使う幾つかの規格は IANA
に登録されていない型の使用を認めていません。

[3] しかしながら、 >>2 だけを理由に [CODE[text/javascript]] を使うのはよくないと言う人は、もっとよく勉強するべきだと言わざるを得ません。 [[Web]] の幾つかの規格では、 IANA 登録名の使用が強制されていません。

[4] >>3 これは [[HTTP]] が出来た時に、 HTTP 通信で使われる媒体型指定はサーバーとクライアントの折衝の結果であって世界的に一意である必要はないと考えられていたことによります。 (この考えが現在でも通用するかはちょっと疑問です。それに、違う識別子を使うよりは同じ識別子を使う方が相互運用性が向上することは確かです。)

[5] しかしまあ、 [[MIME]] で使うときには登録しないといけないのでして。 (でも結局登録しようという [[I-D]] は expire されちゃったしねぇ。)

[6] とまれ、 [[HTML 4]] で使うことは何も問題ないでしょう。 HTML 4 の仕様書の例に出てくるくらいですから。

[13] '''[CODE(MIME)[[[text/[VAR[*]]]]]] を使うのは不適切である''':
[CODE(MIME)[text/[VAR[*]]]] は予備知識がなくても大意が掴める文に使うと定義されているので、
ほとんどすべての場合において JavaScript に
[CODE(MIME)[text/javascript]] という名前を充てるのは不適当です。

ウェブでは歴史的に [CODE(MIME)[text/[VAR[*]]]]
を plain text base の諸形式の媒体型として濫用してきました。
[CODE(MIME)[text/javascript]] もその一つです。

[7] >>2,>>13 の問題から最近は [CODE[[[application/x-javascript]]]] が使われることが多くなってますし、そっちの方がよさげではあります。

** RFC 4329 

- [ID] JavaScript and ECMAScript Media Types <urn:ietf:id:draft-hoehrmann-script-types-00> (expired)
- [110] [CITE@en[[[RFC 4329]]: Scripting Media Types]], [TIME[2022-11-22T06:03:55.000Z]] <https://www.rfc-editor.org/rfc/rfc4329.html>

[119] 
[[RFC 4329]] は、

- [120] 実際に使われている多数の[[MIME型]]を列挙しつつも、
- [121] [[JavaScript]] 用の [CODE[application/javascript]],
[[ECMAScript]] 用の [CODE[application/ecmascript]]
を正規のものとし、
- [122] [[JavaScript]] 用の [CODE[text/javascript]],
[[ECMAScript]] 用の [CODE[text/ecmascript]]
を[[廃止]]として、

その4つだけを [[IANA登録簿]]に登録しました。 [SRC[>>110]]

[123] 
[[RFC 4329]] はそれまでの [[JavaScript]] 関係の [[MIME型]]を巡る混乱を俯瞰し、
[[IETF]] における [[MIME型]]の[[標準化]]の方向性とも整合性を付けながら適切な方向へど誘導することを目指したものでした。

[124] 
既存標準規格に対する深い知識を背景に現実と規格を融和させ進展させようとする、
[[著者]]
[[Bjoern Hoehrmann]]
らしい当時としては優れた[[Web標準]]仕様だったといえます。

[125] 
しかし [[RFC]] 化に時間がかかったこともあったでしょうし、
[[Webブラウザー]]業界や [[Webサーバー]]業界、
サーバー運営者や[[著者]]、
核種関連規格といった莫大な数の利害関係者に影響力を与えるのが難しいこともあったのでしょう。
[CODE[text/[VAR[*]]]] から [CODE[application/[VAR[*]]]] に移行させようとする
[[IETF]] の方針
[SEE[ [[text/*]] ]]
にそもそも無理があったともいえます。
結局 [[RFC 4329]] の試みはほとんど失敗に終わりました。

[126] 
当時としては先進的だったとはいえ、
[[HTML5]] を経た現在の[[Web標準化]]の考え方から見れば、
現実世界の実情を軽視しており、
誰も相手にしていない過去の規格との整合性の方を優先させた、
机上の空論から脱出しきれていないものでしかなかった、
と辛辣に評価せざるを得ません。


[127] 
だとしても、技術的には後世への影響をほぼ与えていないとはいえ、
[[RFC 4329]]
は [[HTML5]] の[[スクリプト]]関連の規定の前段階というべきものです。
[[HTML5]] がこの点に関して現実的な路線を選べたのは、
[[RFC 4329]] (とそれに至る [[I-D]]) 
の開発過程と失敗という経緯があってのことです。
より広くみれば、
現実と規格が一致しないときの折り合いの付け方の試行錯誤という点まで含めて、
標準技術開発史において重要な位置にあるといえます。

-*-*-

[136] 
[[RFC 4329]] は [[E4X]] や将来の [[JavaScript]] は範囲外としていました。
[[E4X]] とは当時一部で実装されていた [CODE[e4x]] [[引数]]を想定していたものです。
[[JavaScript]] の将来の版とは当時開発中だった (そして頓挫した)
[[JavaScript 2.0]] を想定していたものです。
どちらも構文その他に多くの (場合によっては[[非互換][非互換変更]]な)
変更が含まれ得るものでした。


**

[55] [WEAK[2002-11-16 (土) 16:32]] ''[[名無しさん]]'': 色々使われてて嫌ですね... [[Netscape]] が最初に決めておくべきだった。

[56] [[Mozilla]] 1.3a は [CODE[text/javascript]] や [CODE[application/x-javascript]] に対応しています。

[FIG(quote)[
[FIGCAPTION[
[57] [CITE[Google グループにログイン]] ([TIME[2008-06-07 17:18:29 +09:00]] 版) <https://www.google.com/groups/signin?login_required=1&passive=true&_done=http%3A%2F%2Fgroups.google.co.jp%2Fgroups%2Fcreate%3Fhl%3Dja%26lnk%3Dgcf&cd=US&hl=ja>
]FIGCAPTION]

[PRE(HTML example code)[
<noscript><style type="text/css"><!--
  .noscripthide { display:none; } .noscriptinline { display:inline; } .noscriptblock { display:block; }
--></style></noscript>
<script language="javascript"><!--
  document.write('<style type="text/css">.scripthide { display: none; } .scriptinline { display: inline; } .scriptblock { display: block; }</style>');
//--></script>
<script language="javascript1.2"><!--
  if (document.getElementById)
    document.write('<style type="text/css">.script12hide { display: none; } .script12inline { display: inline; } .script12block { display: block; } .lnav { position: absolute; } .lnavch { margin-left:23.0ex;}</style>');
//--></script>

<script language="javascript1.3"><!--
  if (document.getElementById)
    document.write('<style type="text/css">.script13hide { display: none; } .script13inline { display: inline; } .script13block { display: block; }</style>');
//--></script>
]PRE]
]FIG]

[FIG(quote)[
[FIGCAPTION[
[46] 
[REFS[
- [CITE[IRC logs: freenode / #whatwg / 20090402]] ([TIME[2009-06-12 07:57:58 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090402#l-82>
- [CITE[HTML statistics]] ([TIME[2007-09-10 02:32:55 +09:00]] 版) <http://canvex.lazyilluminati.com/misc/stats/scripttypes2.html>
]REFS]
]FIGCAPTION]

># 03:39] <Philip`> Hixie: "the MIME type used to refer to JavaScript in this specification is text/javascript, since that is the most commonly used type." - most commonly used where? http://canvex.lazyilluminati.com/misc/stats/scripttypes2.html says the HTTP Content-Type 1.5 years ago was almost always "application/x-javascript" instead
> [03:45] <Hixie> hm, most commonly used isn't what i meant
> [03:45] <Hixie> most recognisable, maybe?
> [03:46] <Hixie> it's most commonly used in <script type="">, i think
> [03:46] <Hixie> but i haven't checked recently
> [03:47] <Philip`> http://canvex.lazyilluminati.com/misc/stats/scripts2.html - it was the most common <script type> by far
> [03:51] <Hixie> ok
> [03:51] <Hixie> then i'll claim that's what i meant :-P
> [03:51] <Hixie> after all, i don't think i talk about the HTTP type anywhere 

> Script [CODE(HTTP)@en[Content-Type]] values (total count)
,application/x-javascript	,2954 (81.5%)
,text/html	,229 (6.3%)
,text/javascript	,123 (3.4%)

> [CDOE(HTMLe)@en[script]] [CODE(HTMLa)@en[type]] values (total count)
,text/javascript	,31761 (53.8%)
,[missing]	,25676 (43.5%)
,text/JavaScript	,1339 (2.3%)

>[CODE(HTMLe)@en[script]] [CODE(HTMLa)@en[language]] values (total count)
,[missing]	,27315 (46.3%)
,JavaScript	,18198 (30.9%)
,javascript	,6689 (11.3%)
,JavaScript1.2	,2569 (4.4%)
,JavaScript1.1	,1559 (2.6%)
,Javascript	,1077 (1.8%)
,javascript1.2	,513 (0.9%)
]FIG]

[58] [CODE(MIME)@en[[[application/x-ms-jscript]]]] があります。

[47] [CITE@en[Give JavaScript MIME types a <dfn> to refer to · whatwg/html@8d7fe57]] ([TIME[2015-09-03 21:43:40 +09:00]] 版) <https://github.com/whatwg/html/commit/8d7fe572bca136e1397ab8fae57db791fbf8ec13>

[34] [CITE@en[Reference JavaScript MIME type now the HTML Standard defines it · whatwg/fetch@80540f2]]
([TIME[2015-09-18 17:37:25 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/80540f2b891b4d9301c60c5e1e216f40be3d6b80>

[35] [CITE@ja[JSの MIME-Type は text か application か、x- は必要か – カラクリ.jp]] (更新日2015年11月15日版) <http://xn--lcki7of.jp/153/>

[36] [[IETF]] が現実に合わない [[RFC]] を長年放置しているせいで、 >>35
のような混乱させられている記事が未だに執筆されたりしています。

**

[70] [CITE@en[Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb]]
([TIME[2016-01-21 22:15:50 +09:00]] 版)
<https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>

[72] [CITE@en[Add `application/javascript+module` mime to remove ambiguity · Issue #322 · tc39/ecma262]]
([TIME[2017-08-20 00:05:32 +09:00]])
<https://github.com/tc39/ecma262/issues/322>

[73] [CITE@en[clarify the exact MIME for .mjs by bmeck · Pull Request #61 · nodejs/node-eps]]
([TIME[2017-08-20 00:09:48 +09:00]])
<https://github.com/nodejs/node-eps/pull/61>

[74] [CITE[On ES.next features prototype implementations in web browsers]]
([TIME[2011-08-16 05:21:28 +09:00]])
<https://mail.mozilla.org/pipermail/es-discuss/2011-August/016267.html>

[75] [CITE@en[draft-bfarias-javascript-mjs-00 - EMCAScript Media Types Updates]]
([TIME[2017-08-17 17:21:44 +09:00]])
<https://tools.ietf.org/html/draft-bfarias-javascript-mjs-00>

[76] [CITE['''['''Json''']''' Add Extension to JS MIME]]
([TIME[2017-08-17 13:20:21 +09:00]])
<https://www.ietf.org/mail-archive/web/json/current/msg04202.html>

[77] [CITE[Re: '''['''Json''']''' Add Extension to JS MIME]]
([TIME[2017-08-15 10:51:27 +09:00]])
<https://www.ietf.org/mail-archive/web/json/current/msg04209.html>

[78] [CITE[Re: '''['''Json''']''' Add Extension to JS MIME]]
([TIME[2017-08-16 05:20:10 +09:00]])
<https://www.ietf.org/mail-archive/web/json/current/msg04211.html>

[79] [CITE@en[I-D/javascript-mjs at master · bmeck/I-D]]
([TIME[2017-08-20 00:18:18 +09:00]])
<https://github.com/bmeck/I-D/tree/master/javascript-mjs>

[80] [CITE[Re: '''['''Json''']''' Add Extension to JS MIME]]
([TIME[2017-08-16 12:20:06 +09:00]])
<https://www.ietf.org/mail-archive/web/json/current/msg04212.html>

[81] [CITE['''['''Json''']''' ECMAScript Media Types Updates Work]]
([TIME[2017-08-17 13:20:21 +09:00]])
<https://www.ietf.org/mail-archive/web/json/current/msg04214.html>

[82] [CITE@en[Register some more JavaScript MIME types · Issue #2 · bmeck/I-D]]
([TIME[2017-08-20 00:23:22 +09:00]])
<https://github.com/bmeck/I-D/issues/2>

[83] [CITE@en[Clarify prose around JavaScript MIME types]]
([[annevk]]著, [TIME[2017-09-18 23:25:34 +09:00]])
<https://github.com/whatwg/html/commit/470e168aaddc54e0abcfa302639870c299473c99>

[84] [CITE@en[Clarify "Scripting languages" · Issue #2301 · whatwg/html]]
([TIME[2017-09-19 22:54:14 +09:00]])
<https://github.com/whatwg/html/issues/2301>

[85] [CITE@en[Simplify and clarify prose around JavaScript MIME types by annevk · Pull Request #3045 · whatwg/html]]
([TIME[2017-09-19 22:58:10 +09:00]])
<https://github.com/whatwg/html/pull/3045>

[86] [CITE@en[Require servers to use text/javascript for JavaScript]]
([[annevk]]著, [TIME[2017-10-06 00:58:32 +09:00]])
<https://github.com/whatwg/html/commit/d6b4a00acb47dfb0bf93285e4def7b89227929d2>

[89] [CITE@en[Register some more JavaScript MIME types · Issue #2 · bmeck/I-D]]
([TIME[2017-10-06 12:14:43 +09:00]])
<https://github.com/bmeck/I-D/issues/2>

[90] [CITE@en[Require servers to use text/javascript by annevk · Pull Request #3096 · whatwg/html]]
([TIME[2017-10-06 12:20:19 +09:00]])
<https://github.com/whatwg/html/pull/3096>

[95] [CITE@en[Move JavaScript and JSON MIME types from HTML]]
([[domenic]]著, [TIME[2018-02-06 06:27:33 +09:00]])
<https://github.com/whatwg/mimesniff/commit/2ca219fd45c764267d37506d989c77751c171e59>

[96] [CITE@en[Move JavaScript and JSON MIME types from HTML by domenic · Pull Request #58 · whatwg/mimesniff]]
([TIME[2018-02-17 18:31:15 +09:00]])
<https://github.com/whatwg/mimesniff/pull/58>

[97] [CITE@en[Editorial: update usage of the MIME Sniffing Standard]]
([[domenic]]著, [TIME[2018-02-17 03:42:58 +09:00]])
<https://github.com/whatwg/html/commit/fc82f4f8774a2e7e80f6c9477bd881f6c783b186>

[98] [CITE@en[Editorial: update usage of the MIME Sniffing Standard by domenic · Pull Request #3455 · whatwg/html]]
([TIME[2018-02-17 18:46:25 +09:00]])
<https://github.com/whatwg/html/pull/3455>

[99] [CITE@en[Updated JS MIMEs under 2 week review from IETF · Issue #102 · whatwg/meta]]
([TIME[2018-08-30 18:49:57 +09:00]])
<https://github.com/whatwg/meta/issues/102>

[100] [CITE@en[dispatch]]
([TIME[2018-08-30 18:51:31 +09:00]])
<https://mailarchive.ietf.org/arch/browse/dispatch/?gbt=1&index=X3aBzTbPFT8bJRAYcO7ldjJmAls>

[101] [CITE@en[All `text` JavaScript types are deprecated according to RFC 4329 · Issue #76 · whatwg/mimesniff]]
([TIME[2019-01-23 22:11:10 +09:00]])
<https://github.com/whatwg/mimesniff/issues/76>

[102] [CITE@en[Error in Section 4. Registration · Issue #21 · bmeck/I-D]]
([TIME[2019-01-23 22:15:01 +09:00]])
<https://github.com/bmeck/I-D/issues/21>

[103] [CITE@en[Enforce strict MIME type checks for worker-imported scripts]]
([[mikewest]]著, [TIME[2018-12-19 07:18:59 +09:00]])
<https://github.com/whatwg/html/commit/d1c3679934f52450666750464effb97e14f555e0>

[104] [CITE@en[Nosniffing for Worker Scripts · Issue #3255 · whatwg/html]]
([TIME[2019-05-31 18:27:17 +09:00]])
<https://github.com/whatwg/html/issues/3255>


** RFC 9239


[107] [CITE@en[[[RFC 9239]]: Updates to ECMAScript Media Types]], 
[[Matthew A. Miller]], 
May 2022,
[TIME[2022-11-22T05:49:49.000Z]] <https://www.rfc-editor.org/rfc/rfc9239>

[108] 
[TIME[令和4(2022)年5月][2022-05]]、
[[RFC Editor]]
は[[情報提供RFC]]
[DFN[RFC 9239]]
を発行しました。
これによって
[[RFC 4329]] は[[廃止]]されました [SRC[>>107]]。


[140] 
現実に合わない [[RFC 4329]] の規定はすべて削除されて、
おおむね実情に合う形のものに置き換えられました。
ただし [[IETF]] 外で開発されたものに由来し [[IETF]] の [[best practice]]
には反している、不適切であるが例外的に認めるものである、
という旨の注意書きがそこかしこに挿入されていて、
失敗を素直に認めきれない [[IETF]] の姿勢が現れています。

[141] 
ともかくこの [[RFC]] の出版によって形式的に残存していた [[JavaScript]]
処理に関する矛盾した規定は消失しました。 

[142] 
標準仕様の関係性としての形式的な地位はこれが新しい「現行」規格 (の1つ) でありますが、
実効的には
[[ECMA-262]] と [CITE[[[HTML Standard]]]]
(および [CITE[[[Fetch Standard]]]], [CITE[[[Encoding Standard]]]],
[CITE[[[MIME Sniffing Standard]]]])
に必要十分な規定がすべて揃っているので、
[[IETF]] の [[JavaScript]] 仕様に対する影響力が完全に消滅した形となります。

;; [143] 
[CODE[text/html]] や [CODE[text/css]] の [[RFC]] と同様に実質的に死文化したといっていいでしょう。

