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

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

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

否则,在HTTP请求中使用它之前是否有一种validation内容types的方法?

正如在RFC 1341中 所定义的那样:

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

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

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

x-token:= <后面跟着两个字符“X”,没有插入的空格,通过任何标记>

子types=令牌

参数:=属性“=”值

属性:=标记

值:=标记/引用string

令牌:= 1 *

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

还有一个可以遵循它的已知MIMEtypes的列表 (或者,如Joe评论的IANA源代码 )。

正如你所看到的,这个列表太大了,你无法对所有这些进行validation。 你可以做的是对通用格式和type属性进行validation,以确保它是正确的(一组选项是小的),并假设它后面是正确的(当然,捕捉任何exception时,你可能会遇到它到实际使用)。

另请注意上面的注释:

如果出于某种原因要使用另一种主要types,则必须给出一个以“X-”开头的名称来表示其非标准状态,并避免与未来正式名称的任何潜在冲突。

您会注意到很多HTTP请求/响应都包含某种自定义types的X-报头,请在validationtypes时记住这一点。

HTTP请求或响应中的Content-Type标头描述了内容

键入消息正文。 请求中的Accept头部告诉服务器

内容types,客户期望在响应主体。 内容types是

使用互联网媒体types表示。 互联网媒体types(也被称为

MIMEtypes)指示文件包含的数据的types。 这里是一个例子:

  Content-Type: text/html 

此标题指示正文内容以html格式显示。 该

内容types值的格式是主要types/子types,后面是可选的

以分号分隔的属性值对(称为参数)。

互联网媒体types基于主要(或初始) Content-Type标头大致分为以下类别:

  • 文本 :该types表示内容为纯文本,不需要专门的软件来读取内容。 子types代表了更多关于内容的具体细节,客户可以使用它来进行特殊处理,如果有的话。 例如, Content-Type: text / html表示主体内容是html,客户端可以使用这个提示在显示响应的同时踢出渲染引擎。
  • 多部分 :如名称所示,此types由独立数据types的多个部分组成。 例如, Content-Type: multipart / form-data用于提交包含文件,非ASCII数据和二进制数据的表单。
  • 消息 :这种types封装了更多的消息。 它允许消息包含其他消息或指向其他消息的指针。 例如, Content-Type消息/部分内容types允许将较大的消息分解为较小的消息。 完整的消息可以被客户端(用户代理)读取,把所有的中断消息放在一起。
  • 图像 :这种types代表图像数据。 例如, Content-Type: image / png表示主体内容是一个.png图像。
  • audio :这种types表示audio数据。 例如, Content-Type: audio / mpeg表示主体内容是MP3或其他MPEGaudio。
  • video :这种types表示video数据。 例如Content-Type:video / mp4表示主体内容是MP4video。
  • 应用程序 :这种types表示应用程序数据或二进制数据。 例如, Content-Typeapplication / json ; charset = utf-8将内容指定为以UTF-8字符编码编码的JavaScript对象表示法(JSON)格式。

要查看完整列表,请访问“ 互联网号码分配机构”(IANA)的“ 媒体types”网站

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

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

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

把这个代码放在运行时获得“内容types”:

vb.net:

 dim ContentType = Web.MimeMapping.GetMimeMapping("c:\MyArchive.zip") 

要么

 dim ContentType = Web.MimeMapping.GetMimeMapping(".zip")