【问题标题】:HttpServletRequest and getHeader(): How to handle case insensitive headers properly?HttpServletRequest 和 getHeader():如何正确处理不区分大小写的标头?
【发布时间】:2010-11-25 15:56:53
【问题描述】:

由于我发现根据 RFC,HTTP 标头不区分大小写,我想知道如何使用 Servlet 以不区分大小写的方式访问 HTTP 标头。有一个 #getHeader(String) 方法来获取标题,但结果证明该方法对标题字段区分大小写。

是否有“不区分大小写”的方式来获取标题字段?还是我必须遍历所有标题字段才能找到我正在寻找的标题字段?

【问题讨论】:

    标签: java servlets http-headers


    【解决方案1】:

    您使用的是哪个 servlet 容器? docs for getHeader(String) 状态:

    标题名称不区分大小写。

    所以这听起来像是您正在使用的容器中的一个错误。

    【讨论】:

    • 实际上,它的 Jetty 5。我会调查这个问题,感谢您将我指向 Java EE 文档... ;-)
    • 我认为 Jetty 可能会升级到版本 6(或 7?),您可能想看看升级。
    • 很抱歉复活了一个旧线程,但我只想指出 Tomcat 7.0.39 还返回区分大小写的标头。
    • @bmauter: 你的意思是如果你请求CONTENT-TYPE 它不会给你Content-Type 的值?这听起来很糟糕......
    • 与@JonSkeet 相同,getHeader("Authorization") 无法识别标头“授权”,这是在 tomcat8 上。当我将实际标题更改为“授权”时,它就可以工作了。
    【解决方案2】:

    getHeader 的 tomcat 8.0.24 impl 委托给 'org.apache.tomcat.util.http.MimeHeaders' 最终在下面调用此方法,然后执行不区分大小写的检查

    313 public MessageBytes getValue(String name) {

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 2014-03-25
      • 2012-10-07
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      相关资源
      最近更新 更多