ความแตกต่างระหว่างแอปพลิเคชัน / x-javascript และประเภทเนื้อหาข้อความ / javascript


245

ความแตกต่างระหว่างส่วนหัวเหล่านี้คืออะไร?

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

อันไหนดีที่สุดและทำไม

โปรดอย่าพูดว่าพวกเขาเหมือนกัน - ถ้าพวกเขาเหมือนกันจะไม่มีสามคน ฉันรู้ว่าทั้งสองทำงาน - แต่ฉันต้องการทราบความแตกต่าง


1
ความแตกต่างเป็นเหตุผลดั้งเดิมที่ทำให้สคริปต์ของคุณไม่ถูกบีบอัด ตรวจสอบให้แน่ใจว่าคุณมีรายการใน httpCompression สำหรับประเภทจริงที่คุณให้บริการและโปรดทราบว่า IIS Express จะบีบอัดแอปพลิเคชัน / x-javascript และ text / * เป็นค่าเริ่มต้นเท่านั้น
rism

หมายเหตุ: รายการเต็มรูปแบบของ "ชนิด MIME จาวาสคริปต์" สามารถพบได้ที่นี่: html.spec.whatwg.org/multipage/... นั่นคือรายการค่าที่เบราว์เซอร์ควรอนุญาตให้ใช้scriptกับtypeแอตทริบิวต์ของแท็กเมื่อnosniffมีการระบุคำสั่ง developer.mozilla.org/en-US/docs/Web/HTTP/Headers/
......

คำตอบ:


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 บนเซิร์ฟเวอร์ / เบราว์เซอร์ทั้งหมด ถ้าฉันจะละเว้นมันโดยสิ้นเชิง ??
Obmerk Kronen

8
คุณสามารถละเว้นtype แอตทริบิวต์ใน<script>องค์ประกอบ คุณไม่สามารถข้ามContent-Typeส่วนหัว HTTP ... ไปเลย (หากคุณไม่ได้ระบุไว้ใน PHP ดังนั้น PHP จะใช้ค่าเริ่มต้นtext/htmlซึ่งผิดมาก)
Quentin

2
การทำตามตรรกะที่มนุษย์อ่านได้ไม่ควรจำแนก CSS ภายใต้แอปพลิเคชันแทนข้อความ
FabrícioMatté

2
@frnhr การแก้ไขคำตอบนี้เปลี่ยนความหมายที่ตั้งใจไว้ (ซึ่งเป็นการระบุว่าtext/javascriptล้าสมัยและapplication/x-javascriptเป็นการทดลอง) ที่เลวร้ายยิ่งกว่านั้นก็ยังเหลือจุดเริ่มต้นของคำตอบที่ต่อเนื่องกันโดยมีบล็อกที่บอกว่าtext/javascriptเพิ่งห้อยออกไปด้านบนของคำตอบโดยไม่มีเหตุผลที่ชัดเจน
Mark Amery

1
ใน SVN ให้ใช้ text / 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 ใหม่
Mark Eldridge

21

ประเภท mime ที่ขึ้นต้นด้วยx-จะไม่ได้มาตรฐาน ในกรณีที่จาวาสคริปต์มันล้าสมัยไปแล้ว เพิ่มเติมข้อมูลโค้ดที่สอง

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

ต้องshort_open_tagsเปิดใช้งาน คุณควรหลีกเลี่ยง

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

อย่างไรก็ตามประเภท mime ที่ถูกต้องสมบูรณ์สำหรับจาวาสคริปต์คือ

application/javascript

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


1
คำตอบเก่า แต่ไม่ทราบว่าเป็นเรื่องดีที่จะเริ่มต้นกับแท็กเปิดสั้น ๆ จนกว่าที่ไม่ปฏิบัติที่ดีที่สุด (เราขอ recommand คุณปิดการใช้งาน PHP-SOT ในความเป็นจริง)
เบน Cassinat

8

ตาม RFC 4329 ประเภท MIME ที่ถูกต้องสำหรับ JavaScript application/javascriptที่ควรจะเป็น howerver, รุ่นเก่า IE text/javascriptสำลักนี้ตั้งแต่พวกเขาคาดหวัง


7
เท่าที่ฉันทราบ IE ไม่ได้ให้ลิงอย่างที่ HTTP content type บอก; เฉพาะสิ่งที่typeแอตทริบิวต์HTML กล่าว (และใน HTML 5 ฉบับร่างนั้นอาจตัดการใช้แอตทริบิวต์สำหรับ JavaScript)
Quentin

@Quentin ahh ... นั่นคือสิ่งที่ทำให้ฉันมีปัญหา ขอบคุณ!
martin

3

ใช้ type = "application / javascript"

ในกรณีของ HTML5 แอตทริบิวต์ type นั้นล้าสมัยคุณสามารถลบได้ หมายเหตุ: มันเป็นค่าเริ่มต้นเป็น "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 เหล่านี้รวมถึง:

    + ------------------------------------------------- ---- + | ข้อความ / จาวาสคริปต์ | ข้อความ / ecmascript | | ข้อความ / javascript1.0 | ข้อความ / javascript1.1 | | ข้อความ / javascript1.2 | ข้อความ / javascript1.3 | | ข้อความ / javascript1.4 | ข้อความ / javascript1.5 | | ข้อความ / jscript | ข้อความ / อายุการใช้งาน | | ข้อความ / x-javascript | ข้อความ / x-ecmascript | | ใบสมัคร / x-javascript | ใบสมัคร / x-ecmascript | | ใบสมัคร / จาวาสคริปต์ | ใบสมัคร / ecmascript | + ------------------------------------------------- ---- +

การใช้ประเภทระดับบนสุด "ข้อความ" สำหรับเนื้อหาประเภทนี้เป็นปัญหา เอกสารนี้จึงกำหนด text / javascript และ text /
ecmascript แต่ทำเครื่องหมายว่า "ล้าสมัย" การใช้
ประเภทสื่อที่ใช้ในการทดลองและที่ไม่ได้ลงทะเบียนตามที่ระบุไว้ในส่วนข้างต้นนั้นไม่ได้รับการสนับสนุน
ประเภทสื่อ

  * application/javascript
  * application/ecmascript

ซึ่งกำหนดไว้ในเอกสารนี้มีไว้สำหรับการใช้งานทั่วไปและควรใช้แทน

เอกสารนี้กำหนดข้อกำหนดการประมวลผลที่เทียบเท่าสำหรับ
ประเภท text / javascript, text / ecmascript และ application / javascript
การใช้และการสนับสนุนสำหรับแอปพลิเคชันประเภทสื่อสิ่งพิมพ์ / ecmascript นั้น
แพร่หลายน้อยกว่าสื่อประเภทอื่น ๆ ที่กำหนดไว้ใน
เอกสารนี้ การใช้สิ่งนั้นเพื่อประโยชน์ของเอกสารฉบับนี้กำหนด
กฎการประมวลผลที่เข้มงวดสำหรับประเภทนี้เพื่อส่งเสริมการ
ประมวลผลที่ทำงานร่วมกันได้มากขึ้น

x-javascript นั้นกำลังทดสอบอยู่อย่าใช้งาน

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