Tất cả các giá trị có thể có cho tiêu đề HTTP Kiểu nội dung HTTP là gì?


270

Tôi phải xác thực Content-Typegiá trị tiêu đề trước khi chuyển nó đến một yêu cầu HTTP.

Có một danh sách cụ thể cho tất cả các giá trị có thể của Content-Type?

Mặt khác, có cách nào để xác thực loại nội dung trước khi sử dụng nó trong yêu cầu HTTP không?


9
Các loại phương tiện hợp lệ được cho là đã được đăng ký với IANA - bạn có thể xem danh sách hiện tại tại đây: iana.org/assignments/media-types/media-types.xhtml nhưng lưu ý danh sách này có thể cập nhật theo thời gian. Không có một danh sách cho phép cố định.
Joe


@Joe: "Các loại phương tiện hợp lệ được cho là đã được đăng ký với IANA" - chờ đã, điều này có nghĩa là các loại phương tiện tùy chỉnh (chỉ được sử dụng trong API web dành riêng cho ứng dụng sẽ chỉ được gọi bởi ứng dụng khách tùy chỉnh) không được phép ở tất cả?
HOẶC Mapper

1
@ORMapper tôi sẽ đọc nó nhiều hơn vì "có một danh sách chính thức, nhưng tôi sẽ không ngạc nhiên khi thấy nhiều người khác trong tự nhiên". Về câu hỏi của OP, nếu bạn định thử và xác thực "tất cả các loại" thì ít nhất bạn muốn xác thực tất cả các loại đã đăng ký. Những gì cần làm với những cái bổ sung là kết thúc mở hơn. Theo tôi biết, không có yêu cầu để đăng ký các loại tùy chỉnh.
Joe

Hãy chấp nhận câu trả lời giúp bạn nhiều nhất trong việc giải quyết vấn đề của bạn. Nó giúp độc giả tương lai. Nếu câu trả lời không hữu ích, hãy để lại bình luận bên dưới chúng. Vì vậy, poster có thể cập nhật chúng cho phù hợp. Đọc Tôi nên làm gì khi ai đó trả lời câu hỏi của tôi? để biết thêm chi tiết.
Roshana Pitigala

Câu trả lời:


254

Bạn có thể tìm thấy mọi loại nội dung tại đây: http://www.iana.org/assignments/media-types/media-types.xhtml

Loại phổ biến nhất là:

  1. Loại ứng dụng

    application/java-archive
    application/EDI-X12   
    application/EDIFACT   
    application/javascript   
    application/octet-stream   
    application/ogg   
    application/pdf  
    application/xhtml+xml   
    application/x-shockwave-flash    
    application/json  
    application/ld+json  
    application/xml   
    application/zip  
    application/x-www-form-urlencoded  
    
  2. Nhập âm thanh

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Nhập hình ảnh

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. Gõ nhiều

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Nhập văn bản

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Nhập video

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Gõ vnd:

    application/vnd.android.package-archive
    application/vnd.oasis.opendocument.text    
    application/vnd.oasis.opendocument.spreadsheet  
    application/vnd.oasis.opendocument.presentation   
    application/vnd.oasis.opendocument.graphics   
    application/vnd.ms-excel    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   
    application/vnd.ms-powerpoint    
    application/vnd.openxmlformats-officedocument.presentationml.presentation    
    application/msword   
    application/vnd.openxmlformats-officedocument.wordprocessingml.document   
    application/vnd.mozilla.xul+xml   
    

50

Như được định nghĩa trong RFC 1341 :

Trong ký hiệu BNF mở rộng của RFC 822, giá trị trường tiêu đề Kiểu nội dung được xác định như sau:

Kiểu nội dung: = loại "/" kiểu con * [";" tham số]

loại: = "ứng dụng" / "âm thanh" / "hình ảnh" / "tin nhắn" / "nhiều phần" / "văn bản" / "video" / x-token

x-token: = <Hai ký tự "X-" theo sau, không có khoảng trắng can thiệp, bởi bất kỳ mã thông báo nào>

tiểu loại: = mã thông báo

tham số: = thuộc tính "=" giá trị

thuộc tính: = mã thông báo

giá trị: = mã thông báo / chuỗi trích dẫn

mã thông báo: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Phải ở / "," / ";" / ":" / "\" / <">; quote-chuỗi, /" / "/" ["/"] "/"? "/". ";

một danh sách các loại MIME đã biết có thể theo nó (hoặc, như Joe nhận xét, nguồn IANA ).

Như bạn có thể thấy danh sách này quá lớn để bạn xác nhận đối với tất cả chúng. Những gì bạn có thể làm là xác nhận theo định dạng chung và typethuộc tính để đảm bảo rằng đó là chính xác (tập hợp các tùy chọn là nhỏ) và chỉ giả sử rằng những gì tuân theo nó là chính xác (và tất nhiên bắt bất kỳ trường hợp ngoại lệ nào bạn có thể gặp phải khi đặt nó để sử dụng thực tế).

Cũng lưu ý nhận xét trên:

Nếu một loại chính khác được sử dụng cho bất kỳ lý do nào, thì nó phải được đặt tên bắt đầu bằng "X-" để chỉ trạng thái không chuẩn của nó và để tránh bất kỳ xung đột tiềm năng nào với tên chính thức trong tương lai.

Bạn sẽ nhận thấy rằng rất nhiều yêu cầu / phản hồi HTTP bao gồm một X-tiêu đề thuộc loại tự xác định, hãy ghi nhớ điều này khi xác thực các loại.


RFC 1341 không liên quan đến HTTP.
Julian Reschke

2
RFC 1341 mô tả các tiêu đề Kiểu nội dung được sử dụng trong HTTP. Làm thế nào chính xác bạn sẽ nói họ không liên quan?
Jeroen Vannevel

2
Nó đã bị lỗi thời và được thay thế bởi các tài liệu mới hơn nhiều lần. Điều gì có liên quan là những gì < greenbytes.de/tech/webdav/ Khăn > (cộng với các tài liệu được tham chiếu) phải nói.
Julian Reschke

3

Tôi sẽ nhắm đến việc bao gồm một tập hợp con các giá trị "Kiểu nội dung" có thể, câu hỏi của bạn dường như tập trung vào việc xác định các loại nội dung đã biết.

Tài liệu tham khảo @Jeroen RFC 1341 là tuyệt vời, nhưng đối với một danh sách khá đầy đủ, IANA giữ một trang web của các loại phương tiện được đăng ký chính thức ở đây .


Những loại thuốc này không phải là "mediatypes" (tức là mẫu của những gì đã được quan sát "trong tự nhiên") mà là những loại mediaty trải qua các thủ tục đăng ký IANA. Do đó, họ được đăng ký chính thức. Tìm thấy nó rất quan trọng để chỉ ra điều này :)
DaSourcerer

0

Nếu bạn đang sử dụng jaxrs hoặc bất kỳ loại nào khác, thì sẽ có một lớp được gọi là mediatype.User đánh chặn trước khi gửi yêu cầu và so sánh nó với điều này.

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.