Perbedaan antara jenis konten aplikasi / x-javascript dan teks / javascript

245

Apa perbedaan antara header ini?

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

Mana yang terbaik dan mengapa?

Tolong jangan katakan mereka identik - jika mereka identik tidak akan ada tiga dari mereka. Saya tahu keduanya bekerja - tetapi saya ingin tahu bedanya.

Obmerk Kronen
sumber
1
Perbedaannya juga merupakan alasan klasik mengapa skrip Anda tidak dikompres. Pastikan Anda memiliki entri di httpCompression untuk jenis aktual yang Anda sajikan dan perhatikan bahwa IIS Express hanya mengompres aplikasi / x-javascript dan teks / * secara default.
rism
NB: Daftar lengkap "tipe pantomim javascript" dapat ditemukan di sini: html.spec.whatwg.org/multipage/… . yaitu ini adalah daftar nilai yang harus diizinkan oleh browser untuk atribut scripttag typeketika nosniffdirektif ditentukan. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
JohnLBevan

Jawaban:

320

text/javascriptsudah usang, dan application/x-javascriptbersifat eksperimental (karenanya x-awalan) untuk periode transisi sampai application/javascriptdapat distandarisasi.

Anda harus menggunakan application/javascript. Ini didokumentasikan dalam RFC .

Sejauh menyangkut browser, tidak ada perbedaan (setidaknya dalam header HTTP). Ini hanya perubahan sehingga kelompok tipe text/*dan application/*MIME memiliki makna yang konsisten jika memungkinkan. ( text/*Jenis MIME dimaksudkan untuk konten yang dapat dibaca manusia, JavaScript tidak dirancang untuk secara langsung menyampaikan makna kepada manusia).

Perhatikan bahwa menggunakan application/javascriptdalam typeatribut dari elemen script akan menyebabkan script untuk diabaikan (sebagai dalam bahasa yang tidak dikenal) di beberapa browser lama. Baik terus digunakantext/javascript sana atau hilangkan atribut seluruhnya (yang diizinkan dalam HTML 5).

Ini bukan masalah di header HTTP karena browser secara universal (sejauh yang saya ketahui) mengabaikan jenis konten HTTP sepenuhnya dari skrip, atau cukup modern untuk dikenali application/javascript.

Quentin
sumber
terima kasih banyak untuk jawaban terinci. satu lagi masalah - Anda telah mengatakan bahwa saya dapat menghilangkannya sepenuhnya (hanya HTML5?) - tetapi pertanyaan saya (yang kemudian diedit oleh seseorang) secara khusus tentang JS dalam PHP - apakah ini akan berfungsi sebagai kombo PHP / JS pada semua server / browser apakah saya akan menghilangkannya sepenuhnya ??
Obmerk Kronen
8
Anda bisa menghilangkan type atribut pada <script>elemen. Anda tidak dapat menghilangkan Content-Typeheader HTTP ... ever (jika Anda tidak menentukannya dalam PHP maka PHP akan default text/htmlyang sangat salah).
Quentin
2
Mengikuti logika yang bisa dibaca manusia, bukankah CSS harus diklasifikasikan dalam aplikasi juga bukan teks?
Fabrício Matté
2
@fr, edit Anda untuk jawaban ini mengubah arti yang dimaksudkan (yang menyatakan yang text/javascriptsudah usang dan application/x-javascripteksperimental). Lebih buruk lagi, itu meninggalkan awal jawaban yang tidak jelas, dengan blok mengatakan text/javascripthanya nongkrong di bagian atas jawaban tanpa alasan yang jelas.
Mark Amery
1
Di SVN, pasti menggunakan teks / javascript. SVN memperlakukan apa pun yang TIDAK dimulai dengan teks / sebagai biner. Untuk memperbaiki seluruh copy pekerjaan SVN Anda, Anda perlu membuat file mime.cmd yang berisi yang berikut ini: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) yang ketika dijalankan, akan mengubah tipe mime dari semua file JS di repositori Anda menjadi teks / javascript. Anda kemudian harus mengkomit file JS ke SVN dengan tipe mime baru.
Mark Eldridge
21

tipe mime yang dimulai dengan x-tidak distandarisasi. Dalam kasus javascript agak ketinggalan jaman. Tambahkan potongan kode kedua

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

membutuhkan short_open_tagsharus diaktifkan. kamu harus menghindarinya.

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

Namun, tipe mime yang sepenuhnya benar untuk javascript adalah

application/javascript

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

KingCrunch
sumber
1
Jawaban lama, tetapi tidak tahu apakah itu baik untuk memulai dengan tag terbuka pendek sampai itu bukan praktik terbaik (sebenarnya kami sangat menyarankan Anda untuk menonaktifkan PHP-SOT)
Ben Cassinat
8

Menurut RFC 4329, tipe MIME yang benar untuk JavaScript seharusnya application/javascript. Namun, versi IE yang lebih lama tersedak ini karena mereka harapkan text/javascript.

Björn
sumber
7
Sejauh yang saya ketahui, IE tidak memberikan apa yang dikatakan tipe konten HTTP pada monyet; hanya apa yang typedikatakan atribut HTML (dan dalam konsep HTML 5 atribut tersebut dapat dihilangkan untuk JavaScript).
Quentin
@ Quentin ahh ... itulah yang memberiku masalah. Terima kasih!
martin
3

Gunakan type = "application / javascript"

Dalam hal HTML5, atribut type sudah usang, Anda dapat menghapusnya. Catatan: defaultnya adalah "text / javascript" menurut w3.org, jadi saya sarankan untuk menambahkan "application / javascript" daripada menghapusnya.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
Atribut type memberikan bahasa skrip atau format data. Jika atribut ada, nilainya harus merupakan tipe MIME yang valid. Parameter charset tidak boleh ditentukan. Default, yang digunakan jika atribut tidak ada, adalah "teks / javascript".

Gunakan "aplikasi / javascript", karena "teks / javascript" sudah usang :

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

  1. Jenis dan Kompatibilitas Media Scripting yang Disebarkan

    Berbagai jenis media yang tidak terdaftar telah digunakan secara ad-hoc untuk memberi label dan bertukar program yang ditulis dalam ECMAScript dan JavaScript. Ini termasuk:

    + ------------------------------------------------- ---- + | teks / javascript | text / ecmascript | | text / javascript1.0 | text / javascript1.1 | | text / javascript1.2 | text / javascript1.3 | | text / javascript1.4 | text / javascript1.5 | | teks / jscript | teks / naskah hidup | | text / x-javascript | text / x-ecmascript | | application / x-javascript | application / x-ecmascript | | application / javascript | application / ecmascript | + ------------------------------------------------- ---- +

Penggunaan tipe tingkat atas "teks" untuk jenis konten ini diketahui bermasalah. Dokumen ini dengan demikian mendefinisikan teks / javascript dan teks /
ecmascript tetapi menandainya sebagai "usang". Penggunaan
jenis media eksperimental dan tidak terdaftar, seperti yang tercantum dalam bagian di atas, tidak disarankan.
Jenis media,

  * application/javascript
  * application/ecmascript

yang juga didefinisikan dalam dokumen ini, dimaksudkan untuk penggunaan umum dan harus digunakan sebagai gantinya.

Dokumen ini mendefinisikan persyaratan pemrosesan yang setara untuk
teks jenis / javascript, teks / ecmascript, dan aplikasi / javascript.
Penggunaan dan dukungan untuk aplikasi jenis media / ecmascript
jauh lebih luas daripada jenis media lain yang didefinisikan dalam
dokumen ini. Dengan menggunakan itu untuk keuntungannya, dokumen ini mendefinisikan
aturan pemrosesan yang lebih ketat untuk jenis ini untuk mendorong
pemrosesan yang lebih interoperable .

x-javascript bersifat eksperimental, jangan gunakan itu.

juFo
sumber