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

HTTP headers are case insensitive,但是documentation for 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


我可以确定该测试将在所有Spring配置下通过吗?

最佳答案

根据this commit,明确声明HttpHeaders不区分大小写:


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




旧答案

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

public HttpHeaders() {
    this(new LinkedCaseInsensitiveMap<>(8, Locale.ENGLISH), false);
}


并根据LinkedCaseInsensitiveMap docs


  LinkedHashMap变体,以不区分大小写的方式存储字符串键,例如,用于结果表中基于键的访问。
  
  保留原始顺序以及密钥的原始大小写,同时允许在任何情况下都包含,获取和删除呼叫。


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

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

// no need to convert String to long
long contentLength = httpHeaders.getContentLength();

10-08 04:46