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