Когда использовать приложение типа JavaScript MIME / javascript вместо текста / javascript?

На основании вопроса код jQuery не работает в IE, text/javascript используется в HTML-документах, чтобы Internet Explorer мог его понять.

Но мне интересно, когда бы вы использовали application/javascript и, что более важно, почему бы вы использовали его вместо text/javascript?


person Mark Baijens    schedule 04.11.2010    source источник
comment
возможный обман / объяснение: stackoverflow.com/questions/876561/   -  person Benn    schedule 05.11.2010
comment
См. Также stackoverflow.com/questions/2325571/   -  person Gumbo    schedule 05.11.2010
comment
возможный дубликат Что такое MIME-тип Javascript? Что входит в атрибут type тега скрипта?   -  person Bergi    schedule 13.01.2014
comment


Ответы (4)


Теоретически, согласно RFC 4329, application/javascript.

Причина, по которой он должен быть application, не имеет ничего общего с тем, является ли тип читаемым или исполняемым. Это потому, что существуют специальные механизмы определения кодировки, заложенные самим языком / типом, а не просто общим параметром charset. Подтип text должен быть способен транскодироваться прокси-сервером в другую кодировку, изменяя параметр charset. Это не относится к JavaScript, потому что:

а. RFC говорит, что пользовательские агенты должны выполнять анализ спецификации сценария для определения типа (хотя я не уверен, действительно ли это делают какие-либо браузеры);

б. браузеры используют другую информацию - включая кодировку страницы и в некоторых браузерах атрибут script charset - для определения кодировки. Таким образом, любой прокси, который попытается перекодировать ресурс, сломает его пользователей. (Конечно, на самом деле никто никогда не использует прокси-серверы для транскодирования, но это было намерением.)

Поэтому точные байты файла должны быть сохранены точно, что делает его двоичным application типом, а не технически символьным text.

По той же причине application/xml официально предпочтительнее text/xml: XML имеет свои собственные механизмы сигнализации внутриполосной кодировки. И все игнорируют application и XML.

text/javascript и text/xml могут не быть официальными правильными вещами, но есть то, что все используют сегодня по соображениям совместимости, и причины, по которым они не подходят, практически не имеют значения.

person bobince    schedule 04.11.2010
comment
Лучшее решение для обеспечения совместимости - вообще не включать в ответ какой-либо тип контента. RFC заявляет, что без явного типа контента получатель будет интерпретировать его по контексту, что всегда является правильным поведением для всех браузеров, начиная с самых первых браузеров. - person Pacerier; 01.06.2013
comment
Будьте осторожны с application/javascript и IE, работающим в режиме совместимости с IE=8. Похоже, что встроенные скрипты не оцениваются должным образом. text/javascript там отлично работает. - person Joscha; 16.04.2014
comment
@Pacerier - Я знаю, что этому комментарию 5 лет, но сегодня часто лучше включать mime-типы, особенно для веб-сайтов типа форумов, из соображений безопасности. Когда получатель интерпретирует тип, он становится уязвимым для атаки путем загрузки вредоносного файла javascript в качестве изображения, а затем получения браузером интерпретации и запуска этого сценария. Лучше, чтобы сервер возвращал типы MIME для всех ответов и использовал заголовок X-Content-Type-Options: nosniff, чтобы браузер не интерпретировал тип. - person sammy_winter; 07.09.2018
comment
@sammy_winter Я вижу подобные предупреждения везде и каждый раз передергиваю. Если бы я разрешил пользователям загружать контент, я бы, вероятно, провел больше проверки, чем, о да, регулярное выражение с совпадением имени для файла png, я могу этому доверять, не так ли? Если неправильный заголовок становится проблемой безопасности, проблема может быть где-то глубже, не так ли? Это то же самое, что и при сокрытии Server: nginx или того, что отправляет nginx. Как будто тому, кто способен найти дыру, нужен явный заголовок, чтобы знать, какой сервер вы запускаете ... - person Sahsahae; 28.11.2019
comment
Стандарт WHATWG HTML, похоже, не согласен с IETF относительно того, какой тип MIME следует использовать. html.spec.whatwg.org/#scriptingLanguages ​​ Но на практике это не имеет значения, потому что из mimesniff.spec.whatwg.org/#javascript-mime-type - person sengi; 05.03.2021

Проблема с типом MIME в Javascript заключается в том, что в течение многих лет не существовало стандарта. Теперь у нас есть application / javascript как официальный тип MIME.

Но на самом деле тип MIME вообще не имеет значения, поскольку браузер может сам определить тип. Вот почему в спецификациях HTML5 указано, что type="text/javascript" больше не требуется.

person Harmen    schedule 04.11.2010

application потому что .js-Files - это не то, что пользователь хочет прочитать, а то, что должно быть выполнено.

person thejh    schedule 04.11.2010
comment
Это официальный ответ, но IE подавляется им. - person Benn; 05.11.2010
comment
@Benn: Может быть, потому что пользователям IE нужно читать все файлы JS, потому что они не выполняются должным образом? По крайней мере, Microsoft честно;) - person thejh; 05.11.2010
comment
Мне нравится ваш комментарий, но, к сожалению, люди, которые не могут читать javascript, все еще используют IE, поэтому мы должны с этим справиться :(. - person Mark Baijens; 05.11.2010
comment
Я не думаю, что хотите вы это читать или нет, имеет какое-либо отношение к тому, почему. Это связано с тем, как данные перекодируются - или, скорее, может ли это быть. - person Zenexer; 02.08.2013
comment
технически HTML и CSS также выполняются (анализируются) браузером для создания результата кода в виде визуального содержимого и не предназначены для чтения пользователем, поэтому этот ответ не имеет особого смысла. Я предполагаю, что существует большая путаница в том, что такое текст, а что такое приложение. Если бы я мог проголосовать по этому вопросу, я бы сказал, что IETF следует рассматривать текстовое содержимое как text, а binary как application -ИЛИ цель указанного типа, как на изображении, или как на документе и т. Д. - person ; 28.03.2016

application / javascript - правильный тип для использования, но поскольку он не поддерживается IE6-8, вы застрянете с текстом / javascript. Если вас не волнует валидность (за исключением HTML5), просто не указывайте тип.

person Radu    schedule 04.11.2010
comment
Где ты это взял? Я почти уверен, что это поддерживается. Или, по крайней мере, проигнорируют. - person Zenexer; 24.06.2013
comment
@Zenexer прочитал его ответ на другой вопрос. Похоже, совместимость с IE означает отсутствие application/javascript. - person Camilo Martin; 22.12.2013
comment
@CamiloMartin Я все время использую его с IE до 6. По умолчанию они просто используют JavaScript. - person Zenexer; 22.12.2013
comment
@Zenexer Хм, странно. Интересно, в чем была проблема в других вопросах и ответах. - person Camilo Martin; 22.12.2013
comment
@Zenexer Я давно не сталкивался с этим, но вот еще несколько случаев, когда это вызывает проблемы в IE6-8. Не совсем уверен, почему это имеет значение только несколько раз, но, по моему опыту, это вызывает проблемы. - person Radu; 24.12.2013