Do obsługi plików JavaScript lepiej jest użyć pliku application / javascript lub application / x-javascript

95

Całe pytanie pasuje do tytułu. I żeby dodać trochę kontekstu: nie pytam, co jest najlepsze zgodnie z tym, co mówią specyfikacje, ale raczej, co działa najlepiej, biorąc pod uwagę różnorodność przeglądarek wdrażanych obecnie.

Niektóre punkty danych:

  • Google używa text/javascriptkodu JS używanego na ich stronie głównej.
  • Google używa text/javascriptw Dokumentach Google.
  • Google używa application/x-javascriptdo obsługi plików JavaScript w swojej usłudze bibliotek Ajax .
  • Yahoo używa application/x-javascriptdo obsługi swojego JS.
  • Yahoo używa application/x-javascriptkodu JavaScript wyświetlanego na ich stronie głównej.
średnia
źródło
4
Zabawny. Podajesz trzecią alternatywę w swoich przykładach ... I według Tima obaj duzi gracze się mylą (co do standardów), co prawdopodobnie oznacza tylko, że przeglądarki są tolerancyjne (tutaj nie ma wielkich wiadomości) i może to nie mieć znaczenia.
PhiLho
1
możliwy duplikat: Javascript MIME Type
Bergi

Odpowiedzi:

115
  • text/javascript jest przestarzały
  • application/x-javascript był eksperymentalny podczas podejmowania decyzji o przeprowadzce do…
  • application/javascript to aktualny oficjalny typ MIME dla JS

To powiedziawszy, przeglądarki często ignorują content-typeprzesłane przez serwer i przywiązują dużą wagę do typeatrybutu (a niektóre mogą jeszcze nie rozpoznawać application/javascript).

Moja rekomendacja:

  • Użyj aplikacji / javascript na serwerze
  • Użyj HTML 5 i pomiń typeatrybut w elementach skryptu

Uwaga: specyfikacja HTML jest sprzeczna ze standardem MIME i podjęto próbę zmiany go z powrotem, aby text/javascriptmogło się to zmienić w przyszłości.

Quentin
źródło
3
To pytanie sprzed kilku miesięcy mówi dokładnie odwrotnie. Ktoś się myli :) „Kelly ma rację, przeglądarki zwykle ufają typowi MIME przesłanemu z nagłówkami odpowiedzi zamiast atrybutu type tagu skryptu” stackoverflow.com/questions/189850/…
Marco
6
O nie! Duże, monolityczne, powolne organizacje muszą mieć rację! Specyfikacja musi być błędna! Narghh. Nadal będę ufać specyfikacji i własnemu doświadczeniu z dużych (powolnych) firm, nawet jeśli jedna z nich mnie zatrudniała.
Quentin
1
Hmm, ktoś zapomniał powiedzieć W3C, że tekst / javascript są przestarzałe. Wydaje się, że jest to domyślne ustawienie w HTML 5 . :: scratches head :: Wydaje się również (jeśli moja pobieżna lektura tej sekcji jest poprawna), że programy użytkownika powinny działać tylko na typeatrybucie, ignorując w Content-typeten sposób prawidłowe zachowanie.
big_m
1
@big_m - Dzieje się tak, ponieważ wiele przeglądarek nie rozpoznaje, application/javascriptwięc określenie tego spowoduje zignorowanie skryptu. Programy użytkownika nie powinny ignorować Content-Type. Atrybut type mówi im, czego się spodziewać. Jeśli tego nie popierają, nie powinni zawracać sobie głowy prośbą o to. Jeśli serwer następnie powie, że jest coś innego, powinien kontynuować to, a nie to, co mówi HTML (przynajmniej zgodnie z HTTP, możesz patrzeć na inną specyfikację, nie podałeś żadnych linków).
Quentin,
1
@Quentin, odnosiłem się do sekcji HTML 5 dotyczącej scriptelementu, do którego utworzyłem łącze . Moja lektura tej sekcji różni się od tego, co opisujesz; wydaje się, że przykłada dużą wagę do typeatrybutu i nie wspomina o sprawdzaniu Content-Type, z wyjątkiem określenia kodowania znaków. Zgadzam się, że wydaje się rozsądne, aby agent użytkownika sprawdził, czy typ treści jest zgodny z oczekiwaniami, ale nie znalazłem w specyfikacji HTML niczego, co tego wymaga lub nawet zaleca.
big_m,
12

W większości sytuacji typ MIME wysyłany przez serwer nie ma praktycznego znaczenia. Wybrałbym aplikację / javascript , który jest również zalecany przez RFC.

Matthew Flaschen
źródło
7

Jeśli zdecydujesz się używać aplikacji / javascript dla js na swoich stronach, IE7 i IE8 nie uruchomią Twojego skryptu! Obwiniaj firmę Microsoft, ile chcesz, ale jeśli chcesz, aby większość ludzi uruchamiała Twoje strony, użyj tekstu / javascript.

Drew B.
źródło
3
Kiedy mówisz, że „aplikacja / javascript” nie zadziała, czy masz na myśli, że jest on ustawiony jako typ zawartości w odpowiedzi HTTP, czy jako atrybut „type” tagu skryptu? Pierwotne pytanie dotyczyło typu treści w odpowiedziach HTTP. Na podstawie innych odpowiedzi wygląda na to, że tylko wartość atrybutu „type” w tagach skryptu będzie miała znaczenie w obu przypadkach w IE.
Jesse Hallett
7

Tak było language="javacript". Potem zmieniło się na type="text/javascript". Teraz jest type="application/javacript". Ok, to robi się głupie. Niektóre starsze przeglądarki nie rozpoznają nowej application/javascript, ale nadal rozpoznają starszą text/javascript. Planuję nadal używać tego, bo inaczej stracę godziny na próbach zmiany KAŻDEJ instancji text/javascriptna application/javascript.
Teraz pewnego dnia może być odwrotnie. Któregoś dnia najnowsze przeglądarki mogą odrzucić starą technikę, aby zachować ścisłą zgodność ze standardami.
Ale dopóki ludzie przeglądający moją witrynę nie zaczną narzekać, że „od czasu aktualizacji przeglądarki zniknęło około 50% Twojej witryny”, nie mam motywu do zmiany kodu w mojej witrynie.

Sandip Armal Patil
źródło
7

Oto odpowiedź na to pytanie w 2020 roku.

text/javascriptto poprawny typ MIME JavaScript zgodny ze standardem HTML , który stanowi:

Serwery powinny być używane text/javascriptdla zasobów JavaScript. Serwery nie powinny używać innych typów MIME JavaScript dla zasobów JavaScript i nie mogą używać typów MIME innych niż JavaScript.

A także :

[…] Typ MIME używany do odwoływania się do JavaScript w tej specyfikacji jest text/javascript, ponieważ jest to najczęściej używany typ, mimo że jest to typ oficjalnie przestarzały zgodnie z RFC 4329.

Trwają prace nad odzwierciedleniem tej rzeczywistości w RFC na poziomie IETF: https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

Każde stwierdzenie, że „ text/javascriptjest przestarzały”, jest oparte na RFC 4329, które zarówno standard HTML, jak i wspomniana powyżej wersja robocza IETF (tj. Nadchodzący RFC) są wyraźnie poprawiane.

Mathias Bynens
źródło
4

To było „text / javascript”, ale jest przestarzałe (zobacz listę IANA ), a teraz powinno to być „application / javascript” (zobacz inną listę IANA ).

Tim Büthe
źródło