【问题标题】:What are all the possible values for HTTP "Content-Type" header?HTTP“Content-Type”标头的所有可能值是什么?
【发布时间】:2014-07-06 00:49:21
【问题描述】:

在将 Content-Type 标头值传递给 HTTP 请求之前,我必须对其进行验证。

Content-Type 的所有可能值是否有一个特定列表?

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

【问题讨论】:

  • 应该向 IANA 注册有效的媒体类型 - 您可以在此处查看当前列表:iana.org/assignments/media-types/media-types.xhtml 但请注意,此列表可能会随着时间的推移而更新。没有固定的允许列表。
  • @Joe:“有效的媒体类型应该在 IANA 注册” - 等等,这是否意味着自定义媒体类型(仅用于特定于应用程序的 Web API,该 API 仅用于由自定义客户端应用程序调用)根本不允许?
  • @O.R.Mapper 我会更多地阅读它作为“有一个官方列表,但看到很多其他人在野外我不会感到惊讶”。就 OP 的问题而言,如果您要尝试验证“所有类型”,则至少要验证所有已注册的类型。如何处理额外的则更加开放。据我所知,注册自定义类型没有要求
  • 请接受对您解决问题最有帮助的答案。它可以帮助未来的读者。如果答案没有帮助,请将 cmets 留在他们下方。所以海报可以相应地更新它们。阅读What should I do when someone answers my question? 了解更多信息。

标签: http http-headers httprequest content-type


【解决方案1】:

作为is defined in RFC 1341:

在 RFC 822 的扩展 BNF 表示法中,Content-Type 标头字段 值定义如下:

Content-Type := type "/" 子类型 *[";"参数]

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

x-token :=

子类型 := 令牌

参数:=属性“=”值

属性 := 令牌

值 := 标记/引用字符串

token := 1*

tspecials := "(" / ")" / "" / "@" ;必须在 / "," / ";" / ":" / "" / ; 带引号的字符串, /“/”/“[”/“]”/“?” /“。” ;内使用 /“=”;参数值

还有a list of known MIME types 可以跟随它(或者,正如乔所说,the IANA source)。

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

还要注意上面的评论:

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

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

【讨论】:

  • RFC 1341 与 HTTP 无关。
  • RFC 1341 描述了 HTTP 中使用的 Content-Type 标头。你怎么会说它们不相关?
  • 它已多次被更新的文档废弃和替换。相关的是 greenbytes.de/tech/webdav/…>(加上引用的文档)必须说的话。
【解决方案2】:

如果您使用的是 jaxrs 或任何其他,那么在发送请求之前会有一个名为 mediatype.User 的拦截器并将其与此进行比较。

【讨论】:

    【解决方案3】:

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

    @Jeroen RFC 1341 参考非常好,但 IANA 保留了一个相当详尽的列表 官方注册媒体类型here的网页。

    【讨论】:

    • 那些不是“已知”媒体类型(即“在野外”观察到的样本),而是通过 IANA 注册程序的媒体类型。因此,它们是正式注册的。发现指出这一点很重要:)
    【解决方案4】:

    您可以在此处找到每种内容类型: 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   
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2019-03-03
      相关资源
      最近更新 更多