HttpHeaders getFirst() 不区分大小写

nob*_*bar 2 java spring http-headers resttemplate

我正在使用 Spring 的 RestTemplate 获取 HTTP 标头。

HTTP 标头不区分大小写,但HttpHeaders文档似乎不承认这一点。

快速测试表明事情按预期工作......

HttpHeaders headers = restTemplate.headForHeaders(url);
Long a = Long.parseLong(headers.getFirst("Content-Length"));
Long b = Long.parseLong(headers.getFirst("content-length"));
assert( a.equals(b) ); // passes
Run Code Online (Sandbox Code Playgroud)

我能确定这个测试会在所有 Spring 配置下通过吗?

cac*_*co3 5

根据此提交,明确声明HttpHeaders不区分大小写:

请注意,HttpHeaders通常以不区分大小写的方式处理标题名称。


旧答案

HttpHeaders 只有一个公共构造函数及其主体:

public HttpHeaders() {
    this(new LinkedCaseInsensitiveMap<>(8, Locale.ENGLISH), false);
}
Run Code Online (Sandbox Code Playgroud)

根据LinkedCaseInsensitiveMap 文档

LinkedHashMap 变体以不区分大小写的方式存储字符串键,例如用于结果表中基于键的访问。

保留原始顺序以及键的原始大小写,同时允许包含、获取和删除键的任何情况下的调用

所以是的,它总是以不区分大小写的方式工作。

但是为什么不使用HttpHeaders#getContentLength()?:

// no need to convert String to long
long contentLength = httpHeaders.getContentLength();
Run Code Online (Sandbox Code Playgroud)