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

问题描述 投票:174回答:4

我必须在将Content-Type标头值传递给HTTP请求之前验证它。

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

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

http http-headers content-type http-request
4个回答
163
投票

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

最常见的类型是:

  1. 输入申请 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 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.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

45
投票

作为is definedRFC 1341

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

Content-Type:= type“/”subtype * [“;”参数]

type:=“application”/“audio”/“image”/“message”/“multipart”/“text”/“video”/ x-token

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

subtype:= token

参数:=属性“=”值

attribute:= token

value:= token / quoted-string

令牌:= 1 *

tspecials:=“(”/“)”/“<”/“>”/“@”;必须在/“,”/“;” /“:”/“\”/ <“>; quoted-string,/”/“/”[“/”]“/”?“/”。“;在/”=“中使用;参数值

并且可以跟随它的a list of known MIME types(或者,如乔的评论,the IANA source)。

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

另请注意上面的评论:

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

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


2
投票

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

@Jeroen RFC 1341参考很棒,但对于一个相当详尽的列表,IANA保留了正式注册的媒体类型here的网页。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.