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-Type : application / 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")