เมื่อให้บริการไฟล์ JavaScript ควรใช้ application / javascript หรือ application / x-javascript จะดีกว่าไหม


95

คำถามทั้งหมดตรงกับชื่อเรื่อง และเพื่อเพิ่มบริบท: ฉันไม่ได้ถามว่าอะไรคือสิ่งที่ดีที่สุดตามข้อกำหนดที่ระบุ แต่สิ่งที่ทำงานได้ดีที่สุดจากการผสมผสานของเบราว์เซอร์ที่ใช้งานในปัจจุบัน

ข้อมูลบางจุด:

  • Google ใช้text/javascriptสำหรับ JS ที่ใช้ในโฮมเพจ
  • Google ใช้text/javascriptกับ Google เอกสาร
  • Google ใช้application/x-javascriptในการให้บริการไฟล์ JavaScript กับพวกเขาบริการห้องสมุดอาแจ็กซ์
  • Yahoo ใช้application/x-javascriptเพื่อให้บริการ JS ของพวกเขา
  • Yahoo ใช้application/x-javascriptสำหรับ JavaScript ที่แสดงบนโฮมเพจ

4
ตลก. คุณให้ทางเลือกที่สามในตัวอย่างของคุณ ... และตาม Tim ผู้เล่นรายใหญ่ทั้งสองผิด (เกี่ยวกับมาตรฐาน) ซึ่งอาจหมายความว่าเบราว์เซอร์เท่านั้นที่มีความอดทน (ไม่มีข่าวใหญ่ที่นี่) และอาจไม่สำคัญ
PhiLho

1
การหลอกลวงที่เป็นไปได้: Javascript MIME Type
Bergi

คำตอบ:


116
  • text/javascript ล้าสมัย
  • application/x-javascript อยู่ระหว่างการทดลองในขณะที่ตัดสินใจย้ายไป ...
  • application/javascript คือประเภท MIME อย่างเป็นทางการในปัจจุบันสำหรับ JS

ที่กล่าวว่าเบราว์เซอร์มักจะเพิกเฉยต่อสิ่งcontent-typeที่เซิร์ฟเวอร์ส่งมาและให้ความสำคัญกับtypeแอตทริบิวต์เป็นอย่างมาก(และบางส่วนอาจยังไม่รู้จักapplication/javascript)

คำแนะนำของฉัน:

  • ใช้ application / javascript บนเซิร์ฟเวอร์
  • ใช้ HTML 5 และละเว้นtypeแอตทริบิวต์จากองค์ประกอบสคริปต์

หมายเหตุ: ข้อกำหนด HTMLขัดแย้งกับมาตรฐาน MIME และมีความพยายามที่จะเปลี่ยนกลับเป็นtext/javascriptดังนั้นสิ่งนี้อาจเปลี่ยนแปลงได้ในอนาคต


3
คำถามนี้จากไม่กี่เดือนที่ผ่านมาบอกว่าตรงกันข้าม มีคนเข้าใจผิด :) "ถูกต้องของ Kelly เบราว์เซอร์มักจะเชื่อถือประเภท MIME ที่ส่งพร้อมกับส่วนหัวการตอบกลับเหนือแอตทริบิวต์ type ของแท็กสคริปต์" stackoverflow.com/questions/189850/…
Marco

6
ไม่นะ! องค์กรใหญ่เสาหินช้าต้องใช่! สเป็คต้องผิด! Narghh. ฉันจะยังคงไว้วางใจข้อกำหนดและประสบการณ์ของตัวเองมากกว่า บริษัท ขนาดใหญ่ (ช้า) แม้ว่าหนึ่งในนั้นจะเคยจ้างงานฉันก็ตาม
Quentin

1
อืมมีคนลืมบอก W3C ว่า text / javascript ล้าสมัย มันดูเหมือนว่าจะเริ่มต้นในHTML 5 :: รอยขีดข่วนหัว :: ดูเหมือนว่า (ถ้าการอ่านคร่าวๆของส่วนนี้ถูกต้อง) ว่าตัวแทนผู้ใช้ควรจะไปเฉพาะในtypeแอตทริบิวต์ดังนั้นจึงไม่สนใจว่าContent-typeจะเป็นพฤติกรรมที่ถูกต้อง
big_m

1
@big_m - นั่นเป็นเพราะเบราว์เซอร์จำนวนมากไม่รู้จักapplication/javascriptดังนั้นการระบุว่าจะทำให้พวกเขาเพิกเฉยต่อสคริปต์ ตัวแทนผู้ใช้ไม่ควรเพิกเฉยต่อประเภทเนื้อหา แอตทริบิวต์ type บอกสิ่งที่คาดหวัง หากพวกเขาไม่สนับสนุนก็ไม่ควรที่จะร้องขอ หากเซิร์ฟเวอร์แจ้งว่าเป็นสิ่งที่แตกต่างออกไปพวกเขาควรดำเนินการตามนั้นแทนสิ่งที่ HTML กล่าว (อย่างน้อยตาม HTTP คุณอาจกำลังดูข้อมูลจำเพาะที่แตกต่างออกไปคุณไม่ได้ให้ลิงก์ใด ๆ )
Quentin

1
@Quentin ฉันอ้างถึงส่วน HTML 5 ในscriptองค์ประกอบที่ฉันเชื่อมโยง การอ่านส่วนนั้นของฉันแตกต่างจากที่คุณอธิบาย ดูเหมือนว่าจะให้ความสำคัญกับtypeแอตทริบิวต์เป็นอย่างมากและไม่มีการพูดถึงการตรวจสอบContent-Typeยกเว้นการกำหนดการเข้ารหัสอักขระ ฉันยอมรับว่าตัวแทนผู้ใช้ดูเหมือนจะเป็นการดีที่จะตรวจสอบว่าประเภทเนื้อหาตรงกับสิ่งที่คาดไว้ แต่ฉันไม่พบสิ่งใดในข้อกำหนด HTML ที่ต้องการหรือแนะนำให้ทำเช่นนั้น
big_m

12

ในสถานการณ์ส่วนใหญ่ประเภทละครใบ้ที่เซิร์ฟเวอร์ส่งมานั้นไม่มีความแตกต่างในทางปฏิบัติ ฉันจะไปกับapplication / javascriptซึ่งแนะนำโดย RFC


7

หากคุณเลือกใช้ application / javascript สำหรับ js ในเพจของคุณ IE7 และ IE8 จะไม่เรียกใช้สคริปต์ของคุณ! ตำหนิ Microsoft ทั้งหมดที่คุณต้องการ แต่ถ้าคุณต้องการให้คนส่วนใหญ่เรียกใช้เพจของคุณให้ใช้ text / javascript


3
เมื่อคุณบอกว่า "application / javascript" จะไม่ทำงานคุณหมายความว่าหากตั้งค่าเป็นประเภทเนื้อหาในการตอบสนอง HTTP หรือเป็นแอตทริบิวต์ "type" ของแท็กสคริปต์ คำถามเดิมอยู่ที่ประเภทเนื้อหาในการตอบกลับ HTTP จากคำตอบอื่น ๆ ดูเหมือนว่าเฉพาะค่าของแอตทริบิวต์ "type" บนแท็กสคริปต์เท่านั้นที่จะสร้างความแตกต่างใน IE
Jesse Hallett

7

language="javacript"จะใช้เป็น type="text/javascript"จากนั้นก็จะเปลี่ยนไป type="application/javacript"ตอนนี้มันเป็น ตกลงนี่เริ่มโง่ บางส่วนของเบราว์เซอร์รุ่นเก่าไม่รับรู้ใหม่แต่ยังคงรับรู้เก่าapplication/javascript text/javascriptผมวางแผนที่จะดำเนินการโดยใช้นี้หรืออื่น ๆ ที่ผมจะเสียเวลาเวลาของฉันพยายามที่จะเปลี่ยนอินสแตนซ์ของทุกเข้าไปtext/javascript สักวันสิ่งที่ตรงกันข้ามอาจเป็นจริง บางวันเบราว์เซอร์ใหม่ล่าสุดอาจปฏิเสธเทคนิคเดิมเพื่อให้เป็นไปตามมาตรฐานอย่างเคร่งครัด แต่จนกระทั่งผู้คนที่ดูเว็บไซต์ของฉันเริ่มบ่นว่า "นับตั้งแต่อัปเกรดเบราว์เซอร์ของฉันเว็บไซต์ของคุณหายไปประมาณ 50%" ฉันไม่มีแรงจูงใจที่จะเปลี่ยนรหัสในเว็บไซต์ของฉันapplication/javascript


7

นี่คือคำตอบปี 2020 สำหรับคำถามนี้

text/javascriptเป็นประเภท MIME ของ JavaScript ที่ถูกต้องตามมาตรฐาน HTMLซึ่งระบุว่า:

เซิร์ฟเวอร์ควรใช้text/javascriptสำหรับทรัพยากร JavaScript เซิร์ฟเวอร์ไม่ควรใช้ JavaScript MIME ประเภทอื่นสำหรับทรัพยากร JavaScript และต้องไม่ใช้ประเภท MIME ที่ไม่ใช่ JavaScript

และยัง :

[…] ประเภท MIME ที่ใช้อ้างถึง JavaScript ในข้อกำหนดนี้คือtext/javascriptเนื่องจากเป็นประเภทที่ใช้บ่อยที่สุดแม้ว่าจะเป็นประเภทที่ล้าสมัยอย่างเป็นทางการตาม RFC 4329 ก็ตาม

งานกำลังดำเนินการเพื่อสะท้อนความเป็นจริงนี้ใน RFC ที่ระดับ IETF: https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

การอ้างสิทธิ์ใด ๆ ที่ " text/javascriptเป็นสิ่งที่ล้าสมัย" จะกล่าวเช่นนั้นโดยอ้างอิงจาก RFC 4329 ซึ่งทั้งมาตรฐาน HTML และแบบร่าง IETF ที่กล่าวถึงข้างต้น (เช่น RFC ที่กำลังจะมาถึง) ได้รับการแก้ไขอย่างชัดเจน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.