HttpServletRequest和getHeader(): 如何正确处理大小写不敏感的头信息?

7
自从我发现HTTP头根据RFC是不区分大小写的,我就在想如何以不区分大小写的方式使用Servlet访问HTTP头。虽然有一个#getHeader(String)方法来获取头部,但是这个方法对待头字段区分大小写。
是否存在以"不区分大小写"的方式来获取头字段?还是说我必须迭代所有的头字段才能找到我要查找的头字段?
2个回答

15
你正在使用哪个Servlet容器? getHeader(String)的文档 表示:

标头名称大小写不敏感。

因此,这听起来像是你正在使用的容器中存在的一个错误。


@bmauter:你的意思是如果你请求“CONTENT-TYPE”,它不会给你“Content-Type”的值吗?那听起来有问题啊... - Jon Skeet
@JonSkeet 正确。我请求“授权”,但当iOS发送“authorization”时,什么也没得到。我可以随意重现这个问题。 - bmauter
@bmauter:奇怪。我会向Tomcat报告一个错误(或查看是否存在现有的错误)。根据您的描述,它显然违反了规范。 - Jon Skeet
@JonSkeet 不用在意,看起来我是个白痴。对此感到抱歉。 - bmauter
1
与@JonSkeet相同,getHeader(“Authorization”)无法识别标题“authorization”,并且这是在tomcat8上。当我将实际标题更改为“Authorization”时,它就可以工作了。 - abdel
显示剩余4条评论

2

Tomcat 8.0.24实现的getHeader方法委托给了'org.apache.tomcat.util.http.MimeHeaders',最终调用下面的这个方法进行不区分大小写的检查:

313  public MessageBytes getValue(String name) {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接