Sự khác biệt giữa các loại nội dung ứng dụng / x-javascript và văn bản / javascript


245

Sự khác biệt giữa các tiêu đề này là gì?

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

Cái nào là tốt nhất và tại sao?

Xin đừng nói rằng chúng giống hệt nhau - nếu chúng giống hệt nhau thì sẽ không có ba trong số chúng. Tôi biết cả hai công việc - nhưng tôi muốn biết sự khác biệt.


1
Sự khác biệt cũng là một lý do cổ điển tại sao tập lệnh của bạn không bị nén. Đảm bảo rằng bạn có một mục trong httpCompression cho loại thực tế bạn đang phục vụ và lưu ý rằng IIS Express chỉ nén ứng dụng / x-javascript và văn bản / * theo mặc định.
nghĩa

NB: Một danh sách đầy đủ của "các loại mime javascript" có thể được tìm thấy ở đây: html.spec.whatwg.org/multipage/ . tức là đây là danh sách các giá trị mà trình duyệt sẽ cho phép thuộc tính scriptcủa thẻ typekhi nosniffchỉ thị được chỉ định. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/,
JohnLBevan

Câu trả lời:


320

text/javascriptđã lỗi thời và application/x-javascriptđã được thử nghiệm (do đó là x-tiền tố) cho một giai đoạn chuyển tiếp cho đến khi application/javascriptcó thể được tiêu chuẩn hóa.

Bạn nên sử dụng application/javascript. Điều này được ghi lại trong RFC .

Theo như một trình duyệt có liên quan, không có sự khác biệt (ít nhất là trong các tiêu đề HTTP). Đây chỉ là một thay đổi để các nhóm loại text/*application/*MIME có ý nghĩa nhất quán nếu có thể. (Các text/*loại MIME dành cho nội dung có thể đọc được của con người, JavaScript không được thiết kế để truyền đạt trực tiếp ý nghĩa cho con người).

Lưu ý rằng việc sử dụng application/javascripttrong các typethuộc tính của một yếu tố kịch bản sẽ gây ra các kịch bản để được bỏ qua (như là trong một ngôn ngữ không rõ) trong một số trình duyệt cũ. Tiếp tục sử dụng text/javascriptở đó hoặc bỏ qua toàn bộ thuộc tính (được phép trong HTML 5).

Đây không phải là vấn đề trong các tiêu đề HTTP khi các trình duyệt phổ biến (theo như tôi biết) hoặc bỏ qua hoàn toàn loại tập lệnh nội dung HTTP hoặc đủ hiện đại để nhận ra application/javascript.


cảm ơn rất nhiều vì câu trả lời chi tiết một vấn đề nữa - bạn đã nói rằng tôi có thể bỏ qua nó hoàn toàn (chỉ HTML5?) - nhưng câu hỏi của tôi (sau này đã được ai đó chỉnh sửa) cụ thể là về JS trong PHP - nó có hoạt động như kết hợp PHP / JS trên tất cả các máy chủ / trình duyệt không nếu tôi sẽ bỏ qua nó hoàn toàn ??
Obmerk Kronen

8
Bạn có thể bỏ qua type thuộc tính trên một <script>phần tử. Bạn không thể bỏ qua Content-Typetiêu đề HTTP bao giờ (nếu bạn không chỉ định nó trong PHP thì PHP sẽ mặc định text/htmllà rất sai).
Quentin

2
Theo logic con người có thể đọc được, CSS không nên được phân loại theo ứng dụng thay vì văn bản?
Fabrício Matté

2
@frnhr chỉnh sửa của bạn cho câu trả lời này đã thay đổi ý nghĩa dự định (nghĩa text/javascriptlà đã lỗi thời và application/x-javascriptđã được thử nghiệm). Tồi tệ hơn, nó để lại phần bắt đầu của câu trả lời không mạch lạc, với một khối nói rằng text/javascriptchỉ đi ra ngoài không liên quan ở đầu câu trả lời mà không có lý do rõ ràng.
Đánh dấu Amery

1
Trong SVN, chắc chắn sử dụng văn bản / javascript. SVN coi bất cứ điều gì KHÔNG bắt đầu bằng văn bản / dưới dạng nhị phân. Để sửa toàn bộ bản sao làm việc SVN của bạn, bạn cần tạo tệp mime.cmd chứa các mục sau: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) khi được thực thi, sẽ thay đổi loại mime của tất cả các tệp JS trong kho lưu trữ của bạn thành văn bản / javascript. Sau đó, bạn phải cam kết các tệp JS với SVN với loại mime mới.
Đánh dấu Eldridge

21

loại mime bắt đầu với x-không được tiêu chuẩn hóa. Trong trường hợp javascript, nó là loại lỗi thời. Bổ sung đoạn mã thứ hai

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

yêu cầu short_open_tagsphải được kích hoạt. bạn nên tránh nó

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

Tuy nhiên, loại mime hoàn toàn chính xác cho javascript là

application/javascript

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


1
Câu trả lời cũ, nhưng không biết có nên bắt đầu bằng các thẻ mở ngắn hay không cho đến khi đó không phải là cách thực hành tốt nhất (thực tế chúng tôi khuyên bạn nên vô hiệu hóa PHP-SOT)
Ben Cassinat

8

Theo RFC 4329, loại MIME chính xác cho JavaScript phải là application/javascript. Howerver, các phiên bản IE cũ hơn nghẹt thở vì điều này họ mong đợi text/javascript.


7
Theo như tôi biết, IE không cung cấp cho khỉ một loại nội dung HTTP nói gì; chỉ những gì typethuộc tính HTML nói (và trong bản nháp HTML 5 thuộc tính đó có thể được bỏ qua cho JavaScript).
Quentin

@Quentin ahh ... đó là những gì đã gây rắc rối cho tôi. Cảm ơn!
martin

3

Sử dụng loại = "ứng dụng / javascript"

Trong trường hợp HTML5, thuộc tính type đã lỗi thời, bạn có thể xóa nó. Lưu ý: rằng nó mặc định là "văn bản / javascript" theo w3.org, vì vậy tôi sẽ đề nghị thêm "ứng dụng / javascript" thay vì xóa nó.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
Thuộc tính type cung cấp ngôn ngữ của tập lệnh hoặc định dạng của dữ liệu. Nếu thuộc tính có mặt, giá trị của nó phải là loại MIME hợp lệ. Tham số bộ ký tự không được chỉ định. Mặc định, được sử dụng nếu thuộc tính vắng mặt, là "văn bản / javascript".

Sử dụng "ứng dụng / javascript", bởi vì "text / javascript" đã lỗi thời :

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

  1. Các loại phương tiện và tính tương thích của Scripting đã triển khai

    Các loại phương tiện chưa đăng ký khác nhau đã được sử dụng theo kiểu đặc biệt để gắn nhãn và trao đổi các chương trình được viết bằng ECMAScript và JavaScript. Bao gồm các:

    + ------------------------------------------------- ---- + | văn bản / javascript | văn bản / ecmascript | | văn bản / javascript1.0 | văn bản / javascript1.1 | | văn bản / javascript1.2 | văn bản / javascript1.3 | | văn bản / javascript1.4 | văn bản / javascript1.5 | | văn bản / jscript | văn bản / bản tin | | văn bản / x-javascript | văn bản / x-ecmascript | | ứng dụng / x-javascript | ứng dụng / x-ecmascript | | ứng dụng / javascript | ứng dụng / bản ghi | + ------------------------------------------------- ---- +

Việc sử dụng loại cấp cao nhất "văn bản" cho loại nội dung này được biết là có vấn đề. Do đó, tài liệu này định nghĩa văn bản / javascript và văn bản /
ecmascript nhưng đánh dấu chúng là "lỗi thời". Việc sử dụng các
loại phương tiện thử nghiệm và chưa đăng ký, như được liệt kê trong phần trên, không được khuyến khích.
Các loại phương tiện truyền thông,

  * application/javascript
  * application/ecmascript

cũng được định nghĩa trong tài liệu này, được dành cho sử dụng chung và nên được sử dụng thay thế.

Tài liệu này xác định các yêu cầu xử lý tương đương cho các
loại văn bản / javascript, văn bản / ecmascript và ứng dụng / javascript.
Việc sử dụng và hỗ trợ cho ứng dụng / ecmascript loại phương tiện truyền thông
ít phổ biến hơn đáng kể so với các loại phương tiện khác được định nghĩa trong
tài liệu này. Sử dụng điều đó cho lợi thế của nó, tài liệu này xác định
các quy tắc xử lý chặt chẽ hơn cho loại này để thúc đẩy
quá trình xử lý tương tác nhiều hơn .

x-javascript là thử nghiệm, không sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.