我必须在将Content-Type头值传递给HTTP请求之前验证它。
Content-Type
是否有Content-Type的所有可能值的特定列表?
否则,是否有一种方法可以在HTTP请求中使用内容类型之前验证它?
如RFC 1341中的定义:
在rfc822的扩展BNF表示法中,一个Content-Type报头字段 Value的定义如下: Content-Type:= type "/"亚型*[”;“参数) type:=“应用”;/“audio" /“image"/“message" /“multipart"/“text" /“video"/ x-token < / p > x-token:= <两个字符&;X-"接着,没有 插入空白,任意符号> 子类型:=令牌 参数:= attribute "="价值 属性:= token 取值:= token / quote -string token:= 1*<除SPACE, ctl或tspecials>之外的任何CHAR; tspecials:= "("/“),/“;& lt;“和“/“;;/“@"; 一定在 /“,“/“;”;/“:“/“;”;/ & lt;“比;; 引证字符串, /“/”;/“[”;/“]”;/“?“/“!”; 在内部使用 /“=”;; 参数值< / p >
Content-Type:= type "/"亚型*[”;“参数)
type:=“应用”;/“audio" /“image"/“message" /“multipart"/“text" /“video"/ x-token < / p >
x-token:= <两个字符&;X-"接着,没有 插入空白,任意符号>
子类型:=令牌
参数:= attribute "="价值
属性:= token
取值:= token / quote -string
token:= 1*<除SPACE, ctl或tspecials>之外的任何CHAR;
tspecials:= "("/“),/“;& lt;“和“/“;;/“@"; 一定在 /“,“/“;”;/“:“/“;”;/ & lt;“比;; 引证字符串, /“/”;/“[”;/“]”;/“?“/“!”; 在内部使用 /“=”;; 参数值< / p >
和可以跟在它后面的已知MIME类型的列表(或者,如Joe所说,IANA来源)。
正如您所看到的,这个列表太大了,您无法对所有这些进行验证。你能做的是根据一般格式和type属性进行验证,以确保它是正确的(选项集很小),并假设它后面的内容是正确的(当然,当你实际使用它时,捕捉你可能遇到的任何异常)。
type
还要注意上面的评论:
如果出于任何原因要使用另一个主要类型,则必须给它一个以“;X-”开头的名称;以表明其非标准地位,并避免与未来的正式名称发生任何潜在冲突。
你会注意到很多HTTP请求/响应包含一个自定义的X-头文件,在验证类型时请记住这一点。
X-
如果您正在使用jaxrs或任何其他工具,那么将会有一个名为mediatype的类。在发送请求之前使用用户拦截器,并将其与此进行比较。
我的目标是覆盖可能的“内容类型”值的子集,你的问题似乎集中在识别已知的内容类型上。
最常见的类型有:
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
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
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