HTTP“ Content-Type”标头的所有可能值是什么?


270

我必须先验证Content-Type标头值,然后再将其传递给HTTP请求。

是否有针对所有可能值的特定列表Content-Type

否则,有没有办法在HTTP请求中使用内容类型之前对其进行验证?


9
有效的媒体类型应该在IANA上注册-您可以在此处查看当前列表:iana.org/assignments/media-types/media-types.xhtml, 但请注意,该列表会随着时间的推移而更新。没有固定的允许列表。


@Joe:“应该在IANA上注册有效的媒体类型”-等待,这是否意味着自定义媒体类型(仅用于将由自定义客户端应用程序调用的特定于应用程序的Web API)根本不允许吗?
或Mapper

1
@ORMapper我读得更多,因为“有一份正式名单,但看到很多其他人在野外我不会感到惊讶”。关于OP的问题,如果要尝试验证“所有类型”,则至少要验证所有注册的类型。与其他选项的关系比较开放。据我所知,并不需要注册自定义类型。

请接受最能帮助您解决问题的答案。它可以帮助将来的读者。如果答案无济于事,请在其下方留下评论。因此发布者可以相应地对其进行更新。阅读有人回答我的问题时该怎么办?了解更多。
Roshana Pitigala

Answers:


253

您可以在此处找到每种内容类型:http : //www.iana.org/assignments/media-types/media-types.xhtml

最常见的类型是:

  1. 类型申请

    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. 输入音频

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. 输入图片

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. 键入多部分

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. 输入文字

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. 输入影片

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. 输入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

被定义RFC 1341

在RFC 822的扩展BNF表示法中,内容类型标头字段值定义如下:

Content-Type:=类型“ /”子类型* [“;” 参数]

类型:=“应用程序” /“音频” /“图像” /“消息” /“多部分” /“文本” /“视频” / x令牌

x-token:= <两个字符“ X-”后面紧跟空格,中间没有空格>

子类型:=令牌

参数:=属性“ =”值

属性:=令牌

值:=令牌/带引号的字符串

令牌:= 1 *

tspecials:=“(” /“)” /“ <” /“>” /“ @”; 必须在/“,” /“;”中 /“:” /“ \” / <“>;引号字符串,/” /“ /” [“ /”]“ /”?“ /”。“;在/” =“中使用;参数值

以及可以跟随它的已知MIME类型的列表(或,如Joe所言,IANA源)。

如您所见,该列表太大了,您无法针对所有列表进行验证。您可以做的是对照常规格式和type属性进行验证,以确保正确(选项集很小),并假设其后的内容正确(并且当然可以捕获放置它时可能遇到的任何异常)实际使用)。

另请注意上面的评论:

如果出于任何原因要使用其他主要类型,则必须给该名称指定以“ X-”开头的名称,以指示其非标准状态,并避免与将来的正式名称发生任何潜在冲突。

您会注意到,许多HTTP请求/响应都包含X-一些自定义的标头,在验证类型时请记住这一点。


RFC 1341与HTTP不相关。
朱利安·雷施克

2
RFC 1341描述了HTTP中使用的Content-Type标头。您如何确切地说它们无关?
Jeroen Vannevel 2014年

2
它已被废弃,并多次被较新的文档替代。重要的是< greenbytes.de/tech/webdav/… >(加上参考文件)必须说的话。
朱利安·雷施克

3

我的目标是涵盖可能的“内容类型”值的子集,您的问题似乎集中在识别已知的内容类型上。

@Jeroen RFC 1341参考很棒,但是对于一个相当详尽的列表,IANA 在此处保留了一个官方注册媒体类型的网页。


这些不是“已知”的媒体类型(即“在野外”观察到的样本),而是经过IANA注册程序的媒体类型。因此,它们已正式注册。发现这一点很重要:)
DaSourcerer '16

0

如果您使用的是jaxrs或其他,则将存在一个名为mediatype.User拦截器的类,然后发送请求并将其与该请求进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.