我必须先验证Content-Type
标头值,然后再将其传递给HTTP请求。
是否有Content-Type
的所有可能值的特定列表?
否则,有没有办法在HTTP请求中使用它之前验证内容类型?
答案 0 :(得分:115)
您可以在此处找到每种内容类型: http://www.iana.org/assignments/media-types/media-types.xhtml
最常见的类型是:
输入申请
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
输入音频
audio/mpeg
audio/x-ms-wma
audio/vnd.rn-realaudio
audio/x-wav
输入图片
image/gif
image/jpeg
image/png
image/tiff
image/vnd.microsoft.icon
image/x-icon
image/vnd.djvu
image/svg+xml
输入多部分
multipart/mixed
multipart/alternative
multipart/related (using by MHTML (HTML mail).)
multipart/form-data
输入文字
text/css
text/csv
text/html
text/javascript (obsolete)
text/plain
text/xml
输入视频
video/mpeg
video/mp4
video/quicktime
video/x-ms-wmv
video/x-msvideo
video/x-flv
video/webm
输入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
答案 1 :(得分:41)
在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“=”value
attribute:= token
value:= token / quoted-string
令牌:= 1 *
tspecials:=“(”/“)”/“<” /“>” /“@”;必须在 /“,”/“;” /“:”/“\”/<“&gt ;; quoted-string, /“/”/“[”/“]”/“?” /“。” ;在内部使用 /“=”;参数值
可以跟随它的a list of known MIME types(或者,如Joe所言,the IANA source)。
正如您所看到的,列表太大,无法验证所有这些列表。你可以做的是验证通用格式和type
属性,以确保它是正确的(选项集很小),并假设它后面的内容是正确的(当然捕获任何可能的例外)当你把它用于实际使用时遇到。)
另请注意上面的评论:
如果出于任何原因要使用其他主要类型,则必须为其指定一个以“X-”开头的名称,以表明其非标准状态,并避免与未来的官方名称发生任何潜在冲突。
您会注意到很多 HTTP请求/响应包含某种自定义的X-
标头,在验证类型时请记住这一点。
答案 2 :(得分:2)
我的目标是覆盖可能的“内容类型”值的子集,您的问题似乎集中于识别已知的内容类型。
@Jeroen RFC 1341引用很棒,但对于IANA保留的相当详尽的列表 正式注册的媒体类型here的网页。
答案 3 :(得分:0)
如果您正在使用jaxrs或其他任何内容,那么在发送请求之前会有一个名为mediatype.User拦截器的类,并将其与此进行比较。