Різниця між типом вмісту application / x-javascript та текстовим / javascript-вмістом


245

Яка різниця між цими заголовками?

Content-Type: application/javascript
Content-Type: application/x-javascript
Content-Type: text/javascript

Який із них найкращий і чому?

Будь ласка, не кажіть, що вони однакові - якби вони були однаковими, їх не було б троє. Я знаю обидві роботи - але я хотів би знати різницю.


1
Різниця також є класичною причиною того, що ваші сценарії не стискаються. Переконайтеся, що у вас є запис у httpCompression для фактичного типу, який ви обслуговуєте, і зауважте, що IIS Express стискає лише програму / x-javascript та текст / * за замовчуванням.
підйом

NB: Повний список «JavaScript типів пантоміми» можна знайти тут: html.spec.whatwg.org/multipage / ... . тобто це список значень, який веб-переглядач повинен scriptмістити typeатрибут тегу, коли nosniffвказується директива. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
JohnLBevan

Відповіді:


320

text/javascriptє застарілим і application/x-javascriptбув експериментальним (отжеx- префікс) для перехідного періоду, поки application/javascriptне міг бути стандартизованим.

Ви повинні використовувати application/javascript . Це задокументовано в RFC .

Що стосується браузерів, то різниці немає (принаймні, у заголовках HTTP). Це була лише зміна, так щоtext/*application/* групи типів і MIME мали постійне значення, де це можливо. ( text/*Типи MIME призначені для читаного людьми вмісту, JavaScript не призначений для прямого перенесення сенсу для людей).

Зауважте, що використання application/javascriptв typeатрибуті елемента сценарію призведе до ігнорування сценарію (як невідомої мови) у деяких старих браузерах. Або продовжуйте використовувати text/javascriptтам або повністю опустіть атрибут (що дозволено в HTML 5).

Це не проблема в заголовках HTTP, оскільки браузери загалом (наскільки я знаю) або ігнорують сценарії типу вмісту HTTP повністю, або є досить сучасними для розпізнавання application/javascript.


велике спасибі за детальну відповідь. ще одне питання - ви сказали, що я можу повністю його опустити (лише HTML5?), але моє запитання (яке пізніше хтось відредагував) стосувалося спеціально щодо JS у PHP - чи воно працюватиме як комбо PHP / JS на всіх серверах / браузерах якщо я пропущу це повністю ??
Обмерк Кронен

8
Ви можете опустити type атрибут на <script>елементі. Ви не можете опустити Content-Typeзаголовок HTTP… ніколи (якщо ви не вказали його в PHP, тоді PHP за замовчуванням text/htmlє дуже неправильним).
Квентін

2
Дотримуючись зрозумілої для людини логіки, чи не слід класифікувати CSS під додатком, а не текстом?
Fabrício Matté

2
@frnhr ваша редакція на цю відповідь змінила передбачуване значення (яке полягало в тому, що text/javascriptвоно застаріло і application/x-javascriptбуло експериментальним). Що ще гірше, це залишило початок відповіді непослідовною, з блоком, який говорив, що text/javascriptпросто безрезультатно висить у верхній частині відповіді без видимих ​​причин.
Марк Амерді

1
У SVN обов'язково використовуйте текст / javascript. SVN трактує що-небудь НЕ починаючи з тексту / як двійкове. Щоб виправити всю свою робочу копію SVN, вам потрібно створити файл mime.cmd, що містить таке: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) який при виконанні змінить тип mime всіх файлів JS у вашому сховищі на text / javascript. Тоді вам доведеться зафіксувати файли JS для SVN з новим типом mime.
Марк Елдрідж

21

типи міми, що починаються з x-не стандартизовані. У випадку javascript він є застарілим. Додайте другий фрагмент коду

<?Header('Content-Type: text/javascript');?>

вимагає short_open_tagsбути включеним. вам слід уникати цього.

<?php Header('Content-Type: text/javascript');?>

Однак абсолютно правильний тип mime для javascript є

application/javascript

http://www.iana.org/assignments/media-types/application/index.html


1
Стара відповідь, але не знаю, чи добре це починати з коротких відкритих тегів, поки це не найкраща практика (ми настійно рекомендуємо вам відключити PHP-SOT насправді)
Бен Кассінат

8

Відповідно до RFC 4329, правильний тип MIME для JavaScript повинен бути правильним application/javascript. Ховервер, старіші версії IE задаються цим, оскільки очікують text/javascript.


7
Наскільки мені відомо, IE не дає мавпі те, що говорить тип вмісту HTTP; лише те, що typeговорить атрибут HTML (і у проектах HTML 5 цей атрибут може бути опущений для JavaScript).
Квентін

@Quentin ах ... ось що доставляло мені клопоту. Дякую!
Мартін

3

Використовуйте type = "application / javascript"

У випадку HTML5 атрибут типу є застарілим, його можна видалити. Зауважте: що вона за замовчуванням відповідає "text / javascript" відповідно до w3.org, тому я б запропонував додати "application / javascript", а не видаляти її.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
Атрибут type дає мову сценарію або формату даних. Якщо атрибут присутній, його значення повинно бути дійсним типом MIME. Параметр charset не повинен вказуватися. За замовчуванням, який використовується, якщо атрибут відсутній, є "text / javascript".

Використовуйте "application / javascript", оскільки "text / javascript" є застарілим :

RFC 4329: http://www.rfc-editor.org/rfc/rfc4329.txt

  1. Розгорнуті типи носіїв сценарію та сумісність

    Різні незареєстровані типи засобів масової інформації використовувались спеціально для позначення та обміну програмами, написаними на ECMAScript та JavaScript. До них належать:

    + ------------------------------------------------- ---- + | текст / javascript | текст / ecmascript | | текст / javascript1.0 | текст / javascript1.1 | | текст / javascript1.2 | текст / javascript1.3 | | текст / javascript1.4 | текст / javascript1.5 | | текст / jscript | текст / живопис | | text / x-javascript | текст / x-ecmascript | | додаток / x-javascript | додаток / x-ecmascript | | додаток / javascript | додаток / ecmascript | + ------------------------------------------------- ---- +

Використання типу "текст" верхнього рівня для такого типу контенту, як відомо, є проблематичним. Таким чином, цей документ визначає text / javascript та text /
ecmascript, але позначає їх як "застарілі". Використання експериментальних та
незареєстрованих типів засобів масової інформації, як зазначено у частині вище, не рекомендується.
Типи ЗМІ,

  * application/javascript
  * application/ecmascript

які також визначені в цьому документі, призначені для загального використання і повинні використовуватися замість цього.

Цей документ визначає еквівалентні вимоги обробки для
типів text / javascript, text / ecmascript та application / javascript.
Використання та підтримка додатків / ecmascript
для засобів масової інформації значно менш поширені, ніж для інших типів медіа, визначених у
цьому документі. Використовуючи це на свою користь, цей документ визначає
суворіші правила обробки цього типу для сприяння більш оперативному
обробленню.

x-javascript експериментальний, не використовуйте його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.