Теоретически, согласно RFC 4329 , application/javascript
.
Причина, по которой это должно быть application
, не связана с тем, является ли тип читаемым или исполняемым. Это связано с тем, что существуют собственные механизмы определения кодировки, установленные самим языком / типом, а не просто общим параметром charset
. Подтип text
должен транскодироваться прокси-сервером в другую кодировку, изменяя параметр кодировки. Это не относится к JavaScript, потому что:
а. RFC говорит, что пользовательские агенты должны выполнять BOM-сниффинг сценария, чтобы определить тип (хотя я не уверен, действительно ли какой-либо браузер делает это);
б. браузеры используют другую информацию - включая кодировку страницы и в некоторых браузерах атрибут script charset
- для определения кодировки. Таким образом, любой прокси, который пытался перекодировать ресурс, сломал бы его пользователей. (Конечно, в действительности никто никогда не использует транскодирующие прокси в любом случае, но это было намерением.)
Следовательно, точные байты файла должны быть сохранены точно , что делает его двоичным типом application
, а не технически основанным на символах text
.
По той же причине, application/xml
официально предпочтительнее, чем text/xml
: XML имеет свои собственные механизмы внутриполосной сигнализации кодировки. И все игнорируют application
для XML тоже.
text/javascript
и text/xml
, возможно, не являются официальной верной вещью, но есть то, что все используют сегодня по соображениям совместимости, и причины, почему они не являются правильными, практически не имеют значения.