后端:
参考:- java - APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错! - 小航的技术笔记 - SegmentFault 思否
Q: 这么多获取 Header 的方式有什么区别?
A:
不同的容器下实现方式不同,这里列表说明
undertow | tomcat | jetty | |
---|---|---|---|
请求参数大小写转换 | 不变 | 小写 | 驼峰 |
直接获取请求头某一个 headerName | 忽略大小写,不能为空 | 忽略大小写,不能为空 | 忽略大小写,不能为空 |
使用 Map 获取所有请求头 | Map 的 key 和传入 headerName 大小写的一致,保持一致可获取到 | Map 的 key 全是小写,需要使用小写headerName 获取 | Map 的 key 是驼峰命名法,要使用驼峰命名才可以获取到 |
使用 MultiValueMap 获取请求头 | 实际是从 LinkedHashMap 中获取,区分大小写 | 实际是从 LinkedHashMap 中获取,区分大小写 | 从 LinkedCaseInsensitiveMap 获取,不区分大小写 |
使用 HttpHeaders 获取请求头 | 从 LinkedCaseInsensitiveMap 获取,不区分大小写 | 从 LinkedCaseInsensitiveMap 获取,不区分大小写 | 从 LinkedCaseInsensitiveMap 获取,不区分大小写 |
使用 HttpServletRequest 获取 | 使用 HttpString.hashCodeOf(headerName) 忽略了大小写 | 调用 MimeHeaders#getValue 忽略了大小写 | HttpFields#get 忽略了大小写 |
通过表格发现,即使是不同的容器在使用 HttpHeaders 获取请求头是都是调用了 Spring 的 LinkedCaseInsensitiveMap
获取 header,并且内部忽略了大小写,这里比较推荐使用。
同样使用 HttpServletRequest 的方式获取也比较推荐。
前端:
标签:Map,Http,请求,获取,忽略,header,大小写,LinkedCaseInsensitiveMap From: https://www.cnblogs.com/sunupo/p/18374304