Package org.springframework.http

# Class HttpHeaders

java.lang.Object
org.springframework.http.HttpHeaders

All Implemented Interfaces:
  `Serializable`, `Map<String,List<String>>`, `org.springframework.util.MultiValueMap<String,String>`

public class HttpHeaders extends Object implements org.springframework.util.MultiValueMap<String,String>, Serializable
A data structure representing HTTP request or response headers, mapping String header names to a list of String values, also offering accessors for common application-level data types.

In addition to the regular methods defined by `Map`, this class offers many common convenience methods, for example:

- `getFirst(String)` returns the first value associated with a given header name
- `add(String, String)` adds a header value to the list of values for a header name
- `set(String, String)` sets the header value to a single string value

Note that `HttpHeaders` instances created by the default constructor treat header names in a case-insensitive manner. Instances created with the `HttpHeaders(MultiValueMap)` constructor like those instantiated internally by the framework to adapt to existing HTTP headers data structures do guarantee per-header get/set/add operations to be case-insensitive as mandated by the HTTP specification. However, it is not necessarily the case for operations that deal with the collection as a whole (like `size()`, `values()`, `keySet()` and `entrySet()`). Prefer using `headerSet()` for these cases.

Some backing implementations can store header names in a case-sensitive manner, which will lead to duplicates during the entrySet() iteration where multiple occurrences of a header name can surface depending on letter casing but each such entry has the full `List` of values. — This can be problematic for example when copying headers into a new instance by iterating over the old instance's `entrySet()` and using `addAll(String, List)` rather than `put(String, List)`.

This class is meant to reference "well-known" headers supported by Spring Framework. If your application or library relies on other headers defined in RFCs, please use methods that accept the header name as a parameter.

Since:
  3.0
Author:
  Arjen Poutsma, Sebastien Deleuze, Brian Clozel, Juergen Hoeller, Josh Long, Sam Brannen, Simon Baslé
See Also:
  - Serialized Form

## Nested Class Summary

## Nested classes/interfaces inherited from interface java.util.Map

`Map.Entry<K extends Object,V extends Object>`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`ACCEPT`
The HTTP `Accept` header field name.
`static final String`
`ACCEPT_CHARSET`
The HTTP `Accept-Charset` header field name.
`static final String`
`ACCEPT_ENCODING`
The HTTP `Accept-Encoding` header field name.
`static final String`
`ACCEPT_LANGUAGE`
The HTTP `Accept-Language` header field name.
`static final String`
`ACCEPT_PATCH`
The HTTP `Accept-Patch` header field name.
`static final String`
`ACCEPT_RANGES`
The HTTP `Accept-Ranges` header field name.
`static final String`
`ACCESS_CONTROL_ALLOW_CREDENTIALS`
The CORS `Access-Control-Allow-Credentials` response header field name.
`static final String`
`ACCESS_CONTROL_ALLOW_HEADERS`
The CORS `Access-Control-Allow-Headers` response header field name.
`static final String`
`ACCESS_CONTROL_ALLOW_METHODS`
The CORS `Access-Control-Allow-Methods` response header field name.
`static final String`
`ACCESS_CONTROL_ALLOW_ORIGIN`
The CORS `Access-Control-Allow-Origin` response header field name.
`static final String`
`ACCESS_CONTROL_EXPOSE_HEADERS`
The CORS `Access-Control-Expose-Headers` response header field name.
`static final String`
`ACCESS_CONTROL_MAX_AGE`
The CORS `Access-Control-Max-Age` response header field name.
`static final String`
`ACCESS_CONTROL_REQUEST_HEADERS`
The CORS `Access-Control-Request-Headers` request header field name.
`static final String`
`ACCESS_CONTROL_REQUEST_METHOD`
The CORS `Access-Control-Request-Method` request header field name.
`static final String`
`AGE`
The HTTP `Age` header field name.
`static final String`
`ALLOW`
The HTTP `Allow` header field name.
`static final String`
`AUTHORIZATION`
The HTTP `Authorization` header field name.
`static final String`
`CACHE_CONTROL`
The HTTP `Cache-Control` header field name.
`static final String`
`CONNECTION`
The HTTP `Connection` header field name.
`static final String`
`CONTENT_DISPOSITION`
The HTTP `Content-Disposition` header field name.
`static final String`
`CONTENT_ENCODING`
The HTTP `Content-Encoding` header field name.
`static final String`
`CONTENT_LANGUAGE`
The HTTP `Content-Language` header field name.
`static final String`
`CONTENT_LENGTH`
The HTTP `Content-Length` header field name.
`static final String`
`CONTENT_LOCATION`
The HTTP `Content-Location` header field name.
`static final String`
`CONTENT_RANGE`
The HTTP `Content-Range` header field name.
`static final String`
`CONTENT_TYPE`
The HTTP `Content-Type` header field name.
`static final String`
`COOKIE`
The HTTP `Cookie` header field name.
`static final String`
`DATE`
The HTTP `Date` header field name.
`static final HttpHeaders`
`EMPTY`
An empty `HttpHeaders` instance (immutable).
`static final String`
`ETAG`
The HTTP `ETag` header field name.
`static final String`
`EXPECT`
The HTTP `Expect` header field name.
`static final String`
`EXPIRES`
The HTTP `Expires` header field name.
`static final String`
`FROM`
The HTTP `From` header field name.
`static final String`
`HOST`
The HTTP `Host` header field name.
`static final String`
`IF_MATCH`
The HTTP `If-Match` header field name.
`static final String`
`IF_MODIFIED_SINCE`
The HTTP `If-Modified-Since` header field name.
`static final String`
`IF_NONE_MATCH`
The HTTP `If-None-Match` header field name.
`static final String`
`IF_RANGE`
The HTTP `If-Range` header field name.
`static final String`
`IF_UNMODIFIED_SINCE`
The HTTP `If-Unmodified-Since` header field name.
`static final String`
`LAST_MODIFIED`
The HTTP `Last-Modified` header field name.
`static final String`
`LINK`
The HTTP `Link` header field name.
`static final String`
`LOCATION`
The HTTP `Location` header field name.
`static final String`
`MAX_FORWARDS`
The HTTP `Max-Forwards` header field name.
`static final String`
`ORIGIN`
The HTTP `Origin` header field name.
`static final String`
`PRAGMA`
The HTTP `Pragma` header field name.
`static final String`
`PROXY_AUTHENTICATE`
The HTTP `Proxy-Authenticate` header field name.
`static final String`
`PROXY_AUTHORIZATION`
The HTTP `Proxy-Authorization` header field name.
`static final String`
`RANGE`
The HTTP `Range` header field name.
`static final String`
`REFERER`
The HTTP `Referer` header field name.
`static final String`
`RETRY_AFTER`
The HTTP `Retry-After` header field name.
`static final String`
`SERVER`
The HTTP `Server` header field name.
`static final String`
`SET_COOKIE`
The HTTP `Set-Cookie` header field name.
`static final String`
`SET_COOKIE2`
The HTTP `Set-Cookie2` header field name.
`static final String`
`TE`
The HTTP `TE` header field name.
`static final String`
`TRAILER`
The HTTP `Trailer` header field name.
`static final String`
`TRANSFER_ENCODING`
The HTTP `Transfer-Encoding` header field name.
`static final String`
`UPGRADE`
The HTTP `Upgrade` header field name.
`static final String`
`USER_AGENT`
The HTTP `User-Agent` header field name.
`static final String`
`VARY`
The HTTP `Vary` header field name.
`static final String`
`VIA`
The HTTP `Via` header field name.
`static final String`
`WARNING`
The HTTP `Warning` header field name.
`static final String`
`WWW_AUTHENTICATE`
The HTTP `WWW-Authenticate` header field name.

## Constructor Summary

Constructors
Constructor
Description
`HttpHeaders()`
Construct a new, empty instance of the `HttpHeaders` object using an underlying case-insensitive map.
`HttpHeaders(org.springframework.util.MultiValueMap<String,String> headers)`
Construct a new `HttpHeaders` instance backed by an existing map.

## Method Summary

Modifier and Type
Method
Description
`void`
`add(String headerName, String headerValue)`
Add the given, single header value under the given name.
`void`
`addAll(String key, List<? extends String> values)`
`void`
`addAll(org.springframework.util.MultiValueMap<String,String> values)`
`Map<String,String>`
`asSingleValueMap()`
`void`
`clear()`
`void`
`clearContentHeaders()`
Remove the well-known `"Content-*"` HTTP headers.
`boolean`
`containsKey(Object key)`
`boolean`
`containsValue(Object value)`
`static String`
`encodeBasicAuth(String username, String password, Charset charset)`
Encode the given username and password into Basic Authentication credentials.
`Set<Map.Entry<String,List<String>>>`
`entrySet()`
Return a `Set` views of header entries, reconstructed from iterating over the `keySet()`.
`boolean`
`equals(Object other)`
`void`
`forEach(BiConsumer<? super String,? super List<String>> action)`
Perform an action over each header, as when iterated via `entrySet()`.
`static String`
`formatHeaders(org.springframework.util.MultiValueMap<String,String> headers)`
Helps to format HTTP header values, as HTTP header values themselves can contain comma-separated values, can become confusing with regular `Map` formatting that also uses commas between entries.
`List<String>`
`get(Object key)`
`List<MediaType>`
`getAccept()`
Return the list of acceptable media types, as specified by the `Accept` header.
`List<Charset>`
`getAcceptCharset()`
Return the list of acceptable charsets, as specified by the `Accept-Charset` header.
`List<Locale.LanguageRange>`
`getAcceptLanguage()`
Return the language ranges from the "Accept-Language" header.
`List<Locale>`
`getAcceptLanguageAsLocales()`
A variant of `getAcceptLanguage()` that converts each `Locale.LanguageRange` to a `Locale`.
`List<MediaType>`
`getAcceptPatch()`
Return the list of acceptable media types for `PATCH` methods, as specified by the `Accept-Patch` header.
`boolean`
`getAccessControlAllowCredentials()`
Return the value of the `Access-Control-Allow-Credentials` response header.
`List<String>`
`getAccessControlAllowHeaders()`
Return the value of the `Access-Control-Allow-Headers` response header.
`List<HttpMethod>`
`getAccessControlAllowMethods()`
Return the value of the `Access-Control-Allow-Methods` response header.
`String`
`getAccessControlAllowOrigin()`
Return the value of the `Access-Control-Allow-Origin` response header.
`List<String>`
`getAccessControlExposeHeaders()`
Return the value of the `Access-Control-Expose-Headers` response header.
`long`
`getAccessControlMaxAge()`
Return the value of the `Access-Control-Max-Age` response header.
`List<String>`
`getAccessControlRequestHeaders()`
Return the value of the `Access-Control-Request-Headers` request header.
`HttpMethod`
`getAccessControlRequestMethod()`
Return the value of the `Access-Control-Request-Method` request header.
`Set<HttpMethod>`
`getAllow()`
Return the set of allowed `HTTP methods`, as specified by the `Allow` header.
`String`
`getCacheControl()`
Return the value of the `Cache-Control` header.
`List<String>`
`getConnection()`
Return the value of the `Connection` header.
`ContentDisposition`
`getContentDisposition()`
Return a parsed representation of the Content-Disposition header.
`Locale`
`getContentLanguage()`
Get the first `Locale` of the content languages, as specified by the `Content-Language` header.
`long`
`getContentLength()`
Return the length of the body in bytes, as specified by the `Content-Length` header.
`MediaType`
`getContentType()`
Return the media type of the body, as specified by the `Content-Type` header.
`long`
`getDate()`
Return the date and time at which the message was created, as specified by the `Date` header.
`String`
`getETag()`
Return the entity tag of the body, as specified by the `ETag` header.
`protected List<String>`
`getETagValuesAsList(String name)`
Retrieve a combined result from the field values of the ETag header.
`long`
`getExpires()`
Return the date and time at which the message is no longer valid, as specified by the `Expires` header.
`protected String`
`getFieldValues(String headerName)`
Retrieve a combined result from the field values of multivalued headers.
`String`
`getFirst(String headerName)`
Return the first header value for the given header name, if any.
`long`
`getFirstDate(String headerName)`
Parse the first header value for the given header name as a date, return -1 if there is no value, or raise `IllegalArgumentException` if the value cannot be parsed as a date.
`ZonedDateTime`
`getFirstZonedDateTime(String headerName)`
Parse the first header value for the given header name as a date, return `null` if there is no value, or raise `IllegalArgumentException` if the value cannot be parsed as a date.
`InetSocketAddress`
`getHost()`
Return the value of the `Host` header, if available.
`List<String>`
`getIfMatch()`
Return the value of the `If-Match` header.
`long`
`getIfModifiedSince()`
Return the value of the `If-Modified-Since` header.
`List<String>`
`getIfNoneMatch()`
Return the value of the `If-None-Match` header.
`long`
`getIfUnmodifiedSince()`
Return the value of the `If-Unmodified-Since` header.
`long`
`getLastModified()`
Return the time the resource was last changed, as specified by the `Last-Modified` header.
`URI`
`getLocation()`
Return the (new) location of a resource as specified by the `Location` header.
`List<String>`
`getOrEmpty(Object headerName)`
Get the list of header values for the given header name, if any.
`String`
`getOrigin()`
Return the value of the `Origin` header.
`String`
`getPragma()`
Return the value of the `Pragma` header.
`List<HttpRange>`
`getRange()`
Return the value of the `Range` header.
`String`
`getUpgrade()`
Return the value of the `Upgrade` header.
`List<String>`
`getValuesAsList(String headerName)`
Return all values of a given header name, even if this header is set multiple times.
`List<String>`
`getVary()`
Return the request header names subject to content negotiation.
`int`
`hashCode()`
`Set<Map.Entry<String,List<String>>>`
`headerSet()`
Return a view of the headers as an entry `Set` of key-list pairs.
`boolean`
`isEmpty()`
`Set<String>`
`keySet()`
Return a `Set` view of header names.
`List<String>`
`put(String key, List<String> value)`
`void`
`putAll(Map<? extends String,? extends List<String>> map)`
`List<String>`
`putIfAbsent(String key, List<String> value)`
`static HttpHeaders`
`readOnlyHttpHeaders(HttpHeaders headers)`
Apply a read-only `HttpHeaders` wrapper around the given headers, if necessary.
`static HttpHeaders`
`readOnlyHttpHeaders(org.springframework.util.MultiValueMap<String,String> headers)`
Apply a read-only `HttpHeaders` wrapper around the given headers, if necessary.
`List<String>`
`remove(Object key)`
`void`
`set(String headerName, String headerValue)`
Set the given, single header value under the given name.
`void`
`setAccept(List<MediaType> acceptableMediaTypes)`
Set the list of acceptable media types, as specified by the `Accept` header.
`void`
`setAcceptCharset(List<Charset> acceptableCharsets)`
Set the list of acceptable charsets, as specified by the `Accept-Charset` header.
`void`
`setAcceptLanguage(List<Locale.LanguageRange> languages)`
Set the acceptable language ranges, as specified by the Accept-Language header.
`void`
`setAcceptLanguageAsLocales(List<Locale> locales)`
Variant of `setAcceptLanguage(List)` using `Locale`'s.
`void`
`setAcceptPatch(List<MediaType> mediaTypes)`
Set the list of acceptable media types for `PATCH` methods, as specified by the `Accept-Patch` header.
`void`
`setAccessControlAllowCredentials(boolean allowCredentials)`
Set the (new) value of the `Access-Control-Allow-Credentials` response header.
`void`
`setAccessControlAllowHeaders(List<String> allowedHeaders)`
Set the (new) value of the `Access-Control-Allow-Headers` response header.
`void`
`setAccessControlAllowMethods(List<HttpMethod> allowedMethods)`
Set the (new) value of the `Access-Control-Allow-Methods` response header.
`void`
`setAccessControlAllowOrigin(String allowedOrigin)`
Set the (new) value of the `Access-Control-Allow-Origin` response header.
`void`
`setAccessControlExposeHeaders(List<String> exposedHeaders)`
Set the (new) value of the `Access-Control-Expose-Headers` response header.
`void`
`setAccessControlMaxAge(long maxAge)`
Set the (new) value of the `Access-Control-Max-Age` response header.
`void`
`setAccessControlMaxAge(Duration maxAge)`
Set the (new) value of the `Access-Control-Max-Age` response header.
`void`
`setAccessControlRequestHeaders(List<String> requestHeaders)`
Set the (new) value of the `Access-Control-Request-Headers` request header.
`void`
`setAccessControlRequestMethod(HttpMethod requestMethod)`
Set the (new) value of the `Access-Control-Request-Method` request header.
`void`
`setAll(Map<String,String> values)`
`void`
`setAllow(Set<HttpMethod> allowedMethods)`
Set the set of allowed `HTTP methods`, as specified by the `Allow` header.
`void`
`setBasicAuth(String encodedCredentials)`
Set the value of the Authorization header to Basic Authentication based on the given encoded credentials.
`void`
`setBasicAuth(String username, String password)`
Set the value of the Authorization header to Basic Authentication based on the given username and password.
`void`
`setBasicAuth(String username, String password, Charset charset)`
Set the value of the Authorization header to Basic Authentication based on the given username and password.
`void`
`setBearerAuth(String token)`
Set the value of the Authorization header to the given Bearer token.
`void`
`setCacheControl(String cacheControl)`
Set the (new) value of the `Cache-Control` header.
`void`
`setCacheControl(CacheControl cacheControl)`
Set a configured `CacheControl` instance as the new value of the `Cache-Control` header.
`void`
`setConnection(String connection)`
Set the (new) value of the `Connection` header.
`void`
`setConnection(List<String> connection)`
Set the (new) value of the `Connection` header.
`void`
`setContentDisposition(ContentDisposition contentDisposition)`
Set the Content-Disposition header.
`void`
`setContentDispositionFormData(String name, String filename)`
Set the `Content-Disposition` header when creating a `"multipart/form-data"` request.
`void`
`setContentLanguage(Locale locale)`
Set the `Locale` of the content language, as specified by the Content-Language header.
`void`
`setContentLength(long contentLength)`
Set the length of the body in bytes, as specified by the `Content-Length` header.
`void`
`setContentType(MediaType mediaType)`
Set the media type of the body, as specified by the `Content-Type` header.
`void`
`setDate(long date)`
Set the date and time at which the message was created, as specified by the `Date` header.
`void`
`setDate(String headerName, long date)`
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter.
`void`
`setDate(Instant date)`
Set the date and time at which the message was created, as specified by the `Date` header.
`void`
`setDate(ZonedDateTime date)`
Set the date and time at which the message was created, as specified by the `Date` header.
`void`
`setETag(String tag)`
Set the (new) entity tag of the body, as specified by the `ETag` header.
`void`
`setExpires(long expires)`
Set the date and time at which the message is no longer valid, as specified by the `Expires` header.
`void`
`setExpires(Instant expires)`
Set the date and time at which the message is no longer valid, as specified by the `Expires` header.
`void`
`setExpires(ZonedDateTime expires)`
Set the duration after which the message is no longer valid, as specified by the `Expires` header.
`void`
`setHost(InetSocketAddress host)`
Set the (new) value of the `Host` header.
`void`
`setIfMatch(String ifMatch)`
Set the (new) value of the `If-Match` header.
`void`
`setIfMatch(List<String> ifMatchList)`
Set the (new) value of the `If-Match` header.
`void`
`setIfModifiedSince(long ifModifiedSince)`
Set the (new) value of the `If-Modified-Since` header.
`void`
`setIfModifiedSince(Instant ifModifiedSince)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setIfModifiedSince(ZonedDateTime ifModifiedSince)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setIfNoneMatch(String ifNoneMatch)`
Set the (new) value of the `If-None-Match` header.
`void`
`setIfNoneMatch(List<String> ifNoneMatchList)`
Set the (new) values of the `If-None-Match` header.
`void`
`setIfUnmodifiedSince(long ifUnmodifiedSince)`
Set the (new) value of the `If-Unmodified-Since` header.
`void`
`setIfUnmodifiedSince(Instant ifUnmodifiedSince)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setIfUnmodifiedSince(ZonedDateTime ifUnmodifiedSince)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setInstant(String headerName, Instant date)`
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter.
`void`
`setLastModified(long lastModified)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setLastModified(Instant lastModified)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setLastModified(ZonedDateTime lastModified)`
Set the time the resource was last changed, as specified by the `Last-Modified` header.
`void`
`setLocation(URI location)`
Set the (new) location of a resource, as specified by the `Location` header.
`void`
`setOrigin(String origin)`
Set the (new) value of the `Origin` header.
`void`
`setPragma(String pragma)`
Set the (new) value of the `Pragma` header.
`void`
`setRange(List<HttpRange> ranges)`
Sets the (new) value of the `Range` header.
`void`
`setUpgrade(String upgrade)`
Set the (new) value of the `Upgrade` header.
`void`
`setVary(List<String> requestHeaders)`
Set the request header names (for example, "Accept-Language") for which the response is subject to content negotiation and variances based on the value of those request headers.
`void`
`setZonedDateTime(String headerName, ZonedDateTime date)`
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter.
`int`
`size()`
Return the number of headers in the collection.
`protected String`
`toCommaDelimitedString(List<String> headerValues)`
Turn the given list of header values into a comma-delimited result.
`Map<String,String>`
`toSingleValueMap()`
`String`
`toString()`
`Collection<List<String>>`
`values()`
Return a `Collection` view of all the header values, reconstructed from iterating over the `keySet()`.
`static HttpHeaders`
`writableHttpHeaders(HttpHeaders headers)`
Deprecated, for removal: This API element is subject to removal in a future version.
as of 6.2 in favor of `HttpHeaders(MultiValueMap)`.

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.util.Map

`compute, computeIfAbsent, computeIfPresent, getOrDefault, merge, remove, replace, replace, replaceAll`

### Methods inherited from interface org.springframework.util.MultiValueMap

`addIfAbsent`

## Field Details

### ACCEPT

public static final String ACCEPT
The HTTP `Accept` header field name.

See Also:
  - Section 5.3.2 of RFC 7231
  - Constant Field Values

### ACCEPT_CHARSET

public static final String ACCEPT_CHARSET
The HTTP `Accept-Charset` header field name.

See Also:
  - Section 5.3.3 of RFC 7231
  - Constant Field Values

### ACCEPT_ENCODING

public static final String ACCEPT_ENCODING
The HTTP `Accept-Encoding` header field name.

See Also:
  - Section 5.3.4 of RFC 7231
  - Constant Field Values

### ACCEPT_LANGUAGE

public static final String ACCEPT_LANGUAGE
The HTTP `Accept-Language` header field name.

See Also:
  - Section 5.3.5 of RFC 7231
  - Constant Field Values

### ACCEPT_PATCH

public static final String ACCEPT_PATCH
The HTTP `Accept-Patch` header field name.

Since:
  5.3.6
See Also:
  - Section 3.1 of RFC 5789
  - Constant Field Values

### ACCEPT_RANGES

public static final String ACCEPT_RANGES
The HTTP `Accept-Ranges` header field name.

See Also:
  - Section 5.3.5 of RFC 7233
  - Constant Field Values

### ACCESS_CONTROL_ALLOW_CREDENTIALS

public static final String ACCESS_CONTROL_ALLOW_CREDENTIALS
The CORS `Access-Control-Allow-Credentials` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_ALLOW_HEADERS

public static final String ACCESS_CONTROL_ALLOW_HEADERS
The CORS `Access-Control-Allow-Headers` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_ALLOW_METHODS

public static final String ACCESS_CONTROL_ALLOW_METHODS
The CORS `Access-Control-Allow-Methods` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_ALLOW_ORIGIN

public static final String ACCESS_CONTROL_ALLOW_ORIGIN
The CORS `Access-Control-Allow-Origin` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_EXPOSE_HEADERS

public static final String ACCESS_CONTROL_EXPOSE_HEADERS
The CORS `Access-Control-Expose-Headers` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_MAX_AGE

public static final String ACCESS_CONTROL_MAX_AGE
The CORS `Access-Control-Max-Age` response header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_REQUEST_HEADERS

public static final String ACCESS_CONTROL_REQUEST_HEADERS
The CORS `Access-Control-Request-Headers` request header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### ACCESS_CONTROL_REQUEST_METHOD

public static final String ACCESS_CONTROL_REQUEST_METHOD
The CORS `Access-Control-Request-Method` request header field name.

See Also:
  - CORS W3C recommendation
  - Constant Field Values

### AGE

public static final String AGE
The HTTP `Age` header field name.

See Also:
  - Section 5.1 of RFC 7234
  - Constant Field Values

### ALLOW

public static final String ALLOW
The HTTP `Allow` header field name.

See Also:
  - Section 7.4.1 of RFC 7231
  - Constant Field Values

### AUTHORIZATION

public static final String AUTHORIZATION
The HTTP `Authorization` header field name.

See Also:
  - Section 4.2 of RFC 7235
  - Constant Field Values

### CACHE_CONTROL

public static final String CACHE_CONTROL
The HTTP `Cache-Control` header field name.

See Also:
  - Section 5.2 of RFC 7234
  - Constant Field Values

### CONNECTION

public static final String CONNECTION
The HTTP `Connection` header field name.

See Also:
  - Section 6.1 of RFC 7230
  - Constant Field Values

### CONTENT_ENCODING

public static final String CONTENT_ENCODING
The HTTP `Content-Encoding` header field name.

See Also:
  - Section 3.1.2.2 of RFC 7231
  - Constant Field Values

### CONTENT_DISPOSITION

public static final String CONTENT_DISPOSITION
The HTTP `Content-Disposition` header field name.

See Also:
  - RFC 6266
  - Constant Field Values

### CONTENT_LANGUAGE

public static final String CONTENT_LANGUAGE
The HTTP `Content-Language` header field name.

See Also:
  - Section 3.1.3.2 of RFC 7231
  - Constant Field Values

### CONTENT_LENGTH

public static final String CONTENT_LENGTH
The HTTP `Content-Length` header field name.

See Also:
  - Section 3.3.2 of RFC 7230
  - Constant Field Values

### CONTENT_LOCATION

public static final String CONTENT_LOCATION
The HTTP `Content-Location` header field name.

See Also:
  - Section 3.1.4.2 of RFC 7231
  - Constant Field Values

### CONTENT_RANGE

public static final String CONTENT_RANGE
The HTTP `Content-Range` header field name.

See Also:
  - Section 4.2 of RFC 7233
  - Constant Field Values

### CONTENT_TYPE

public static final String CONTENT_TYPE
The HTTP `Content-Type` header field name.

See Also:
  - Section 3.1.1.5 of RFC 7231
  - Constant Field Values

### COOKIE

public static final String COOKIE
The HTTP `Cookie` header field name.

See Also:
  - Section 4.3.4 of RFC 2109
  - Constant Field Values

### DATE

public static final String DATE
The HTTP `Date` header field name.

See Also:
  - Section 7.1.1.2 of RFC 7231
  - Constant Field Values

### ETAG

public static final String ETAG
The HTTP `ETag` header field name.

See Also:
  - Section 2.3 of RFC 7232
  - Constant Field Values

### EXPECT

public static final String EXPECT
The HTTP `Expect` header field name.

See Also:
  - Section 5.1.1 of RFC 7231
  - Constant Field Values

### EXPIRES

public static final String EXPIRES
The HTTP `Expires` header field name.

See Also:
  - Section 5.3 of RFC 7234
  - Constant Field Values

### FROM

public static final String FROM
The HTTP `From` header field name.

See Also:
  - Section 5.5.1 of RFC 7231
  - Constant Field Values

### HOST

public static final String HOST
The HTTP `Host` header field name.

See Also:
  - Section 5.4 of RFC 7230
  - Constant Field Values

### IF_MATCH

public static final String IF_MATCH
The HTTP `If-Match` header field name.

See Also:
  - Section 3.1 of RFC 7232
  - Constant Field Values

### IF_MODIFIED_SINCE

public static final String IF_MODIFIED_SINCE
The HTTP `If-Modified-Since` header field name.

See Also:
  - Section 3.3 of RFC 7232
  - Constant Field Values

### IF_NONE_MATCH

public static final String IF_NONE_MATCH
The HTTP `If-None-Match` header field name.

See Also:
  - Section 3.2 of RFC 7232
  - Constant Field Values

### IF_RANGE

public static final String IF_RANGE
The HTTP `If-Range` header field name.

See Also:
  - Section 3.2 of RFC 7233
  - Constant Field Values

### IF_UNMODIFIED_SINCE

public static final String IF_UNMODIFIED_SINCE
The HTTP `If-Unmodified-Since` header field name.

See Also:
  - Section 3.4 of RFC 7232
  - Constant Field Values

### LAST_MODIFIED

public static final String LAST_MODIFIED
The HTTP `Last-Modified` header field name.

See Also:
  - Section 2.2 of RFC 7232
  - Constant Field Values

### LINK

public static final String LINK
The HTTP `Link` header field name.

See Also:
  - RFC 5988
  - Constant Field Values

### LOCATION

public static final String LOCATION
The HTTP `Location` header field name.

See Also:
  - Section 7.1.2 of RFC 7231
  - Constant Field Values

### MAX_FORWARDS

public static final String MAX_FORWARDS
The HTTP `Max-Forwards` header field name.

See Also:
  - Section 5.1.2 of RFC 7231
  - Constant Field Values

### ORIGIN

public static final String ORIGIN
The HTTP `Origin` header field name.

See Also:
  - RFC 6454
  - Constant Field Values

### PRAGMA

public static final String PRAGMA
The HTTP `Pragma` header field name.

See Also:
  - Section 5.4 of RFC 7234
  - Constant Field Values

### PROXY_AUTHENTICATE

public static final String PROXY_AUTHENTICATE
The HTTP `Proxy-Authenticate` header field name.

See Also:
  - Section 4.3 of RFC 7235
  - Constant Field Values

### PROXY_AUTHORIZATION

public static final String PROXY_AUTHORIZATION
The HTTP `Proxy-Authorization` header field name.

See Also:
  - Section 4.4 of RFC 7235
  - Constant Field Values

### RANGE

public static final String RANGE
The HTTP `Range` header field name.

See Also:
  - Section 3.1 of RFC 7233
  - Constant Field Values

### REFERER

public static final String REFERER
The HTTP `Referer` header field name.

See Also:
  - Section 5.5.2 of RFC 7231
  - Constant Field Values

### RETRY_AFTER

public static final String RETRY_AFTER
The HTTP `Retry-After` header field name.

See Also:
  - Section 7.1.3 of RFC 7231
  - Constant Field Values

### SERVER

public static final String SERVER
The HTTP `Server` header field name.

See Also:
  - Section 7.4.2 of RFC 7231
  - Constant Field Values

### SET_COOKIE

public static final String SET_COOKIE
The HTTP `Set-Cookie` header field name.

See Also:
  - Section 4.2.2 of RFC 2109
  - Constant Field Values

### SET_COOKIE2

public static final String SET_COOKIE2
The HTTP `Set-Cookie2` header field name.

See Also:
  - RFC 2965
  - Constant Field Values

### TE

public static final String TE
The HTTP `TE` header field name.

See Also:
  - Section 4.3 of RFC 7230
  - Constant Field Values

### TRAILER

public static final String TRAILER
The HTTP `Trailer` header field name.

See Also:
  - Section 4.4 of RFC 7230
  - Constant Field Values

### TRANSFER_ENCODING

public static final String TRANSFER_ENCODING
The HTTP `Transfer-Encoding` header field name.

See Also:
  - Section 3.3.1 of RFC 7230
  - Constant Field Values

### UPGRADE

public static final String UPGRADE
The HTTP `Upgrade` header field name.

See Also:
  - Section 6.7 of RFC 7230
  - Constant Field Values

### USER_AGENT

public static final String USER_AGENT
The HTTP `User-Agent` header field name.

See Also:
  - Section 5.5.3 of RFC 7231
  - Constant Field Values

### VARY

public static final String VARY
The HTTP `Vary` header field name.

See Also:
  - Section 7.1.4 of RFC 7231
  - Constant Field Values

### VIA

public static final String VIA
The HTTP `Via` header field name.

See Also:
  - Section 5.7.1 of RFC 7230
  - Constant Field Values

### WARNING

public static final String WARNING
The HTTP `Warning` header field name.

See Also:
  - Section 5.5 of RFC 7234
  - Constant Field Values

### WWW_AUTHENTICATE

public static final String WWW_AUTHENTICATE
The HTTP `WWW-Authenticate` header field name.

See Also:
  - Section 4.1 of RFC 7235
  - Constant Field Values

### EMPTY

public static final HttpHeaders EMPTY
An empty `HttpHeaders` instance (immutable).

Since:
  5.0

## Constructor Details

### HttpHeaders

public HttpHeaders()
Construct a new, empty instance of the `HttpHeaders` object using an underlying case-insensitive map.

### HttpHeaders

public HttpHeaders(org.springframework.util.MultiValueMap<String,String> headers)
Construct a new `HttpHeaders` instance backed by an existing map.

This constructor is available as an optimization for adapting to existing headers map structures, primarily for internal use within the framework.

Parameters:
  `headers` - the headers map (expected to operate with case-insensitive keys)
Since:
  5.1

## Method Details

### getOrEmpty

public List<String> getOrEmpty(Object headerName)
Get the list of header values for the given header name, if any.

Parameters:
  `headerName` - the header name
Returns:
  the list of header values, or an empty list
Since:
  5.2

### setAccept

public void setAccept(List<MediaType> acceptableMediaTypes)
Set the list of acceptable media types, as specified by the `Accept` header.

### getAccept

public List<MediaType> getAccept()
Return the list of acceptable media types, as specified by the `Accept` header.

Returns an empty list when the acceptable media types are unspecified.

### setAcceptLanguage

public void setAcceptLanguage(List<Locale.LanguageRange> languages)
Set the acceptable language ranges, as specified by the Accept-Language header.

Since:
  5.0

### getAcceptLanguage

public List<Locale.LanguageRange> getAcceptLanguage()
Return the language ranges from the "Accept-Language" header.

If you only need sorted, preferred locales only use `getAcceptLanguageAsLocales()` or if you need to filter based on a list of supported locales you can pass the returned list to `Locale.filter(List, Collection)`.

Throws:
  `IllegalArgumentException` - if the value cannot be converted to a language range
Since:
  5.0

### setAcceptLanguageAsLocales

public void setAcceptLanguageAsLocales(List<Locale> locales)
Variant of `setAcceptLanguage(List)` using `Locale`'s.

Since:
  5.0

### getAcceptLanguageAsLocales

public List<Locale> getAcceptLanguageAsLocales()
A variant of `getAcceptLanguage()` that converts each `Locale.LanguageRange` to a `Locale`.

Returns:
  the locales or an empty list
Throws:
  `IllegalArgumentException` - if the value cannot be converted to a locale
Since:
  5.0

### setAcceptPatch

public void setAcceptPatch(List<MediaType> mediaTypes)
Set the list of acceptable media types for `PATCH` methods, as specified by the `Accept-Patch` header.

Since:
  5.3.6

### getAcceptPatch

public List<MediaType> getAcceptPatch()
Return the list of acceptable media types for `PATCH` methods, as specified by the `Accept-Patch` header.

Returns an empty list when the acceptable media types are unspecified.

Since:
  5.3.6

### setAccessControlAllowCredentials

public void setAccessControlAllowCredentials(boolean allowCredentials)
Set the (new) value of the `Access-Control-Allow-Credentials` response header.

### getAccessControlAllowCredentials

public boolean getAccessControlAllowCredentials()
Return the value of the `Access-Control-Allow-Credentials` response header.

### setAccessControlAllowHeaders

public void setAccessControlAllowHeaders(List<String> allowedHeaders)
Set the (new) value of the `Access-Control-Allow-Headers` response header.

### getAccessControlAllowHeaders

public List<String> getAccessControlAllowHeaders()
Return the value of the `Access-Control-Allow-Headers` response header.

### setAccessControlAllowMethods

public void setAccessControlAllowMethods(List<HttpMethod> allowedMethods)
Set the (new) value of the `Access-Control-Allow-Methods` response header.

### getAccessControlAllowMethods

public List<HttpMethod> getAccessControlAllowMethods()
Return the value of the `Access-Control-Allow-Methods` response header.

### setAccessControlAllowOrigin

public void setAccessControlAllowOrigin(@Nullable String allowedOrigin)
Set the (new) value of the `Access-Control-Allow-Origin` response header.

### getAccessControlAllowOrigin

@Nullable public String getAccessControlAllowOrigin()
Return the value of the `Access-Control-Allow-Origin` response header.

### setAccessControlExposeHeaders

public void setAccessControlExposeHeaders(List<String> exposedHeaders)
Set the (new) value of the `Access-Control-Expose-Headers` response header.

### getAccessControlExposeHeaders

public List<String> getAccessControlExposeHeaders()
Return the value of the `Access-Control-Expose-Headers` response header.

### setAccessControlMaxAge

public void setAccessControlMaxAge(Duration maxAge)
Set the (new) value of the `Access-Control-Max-Age` response header.

Since:
  5.2

### setAccessControlMaxAge

public void setAccessControlMaxAge(long maxAge)
Set the (new) value of the `Access-Control-Max-Age` response header.

### getAccessControlMaxAge

public long getAccessControlMaxAge()
Return the value of the `Access-Control-Max-Age` response header.

Returns -1 when the max age is unknown.

### setAccessControlRequestHeaders

public void setAccessControlRequestHeaders(List<String> requestHeaders)
Set the (new) value of the `Access-Control-Request-Headers` request header.

### getAccessControlRequestHeaders

public List<String> getAccessControlRequestHeaders()
Return the value of the `Access-Control-Request-Headers` request header.

### setAccessControlRequestMethod

public void setAccessControlRequestMethod(@Nullable HttpMethod requestMethod)
Set the (new) value of the `Access-Control-Request-Method` request header.

### getAccessControlRequestMethod

@Nullable public HttpMethod getAccessControlRequestMethod()
Return the value of the `Access-Control-Request-Method` request header.

### setAcceptCharset

public void setAcceptCharset(List<Charset> acceptableCharsets)
Set the list of acceptable charsets, as specified by the `Accept-Charset` header.

### getAcceptCharset

public List<Charset> getAcceptCharset()
Return the list of acceptable charsets, as specified by the `Accept-Charset` header.

### setAllow

public void setAllow(Set<HttpMethod> allowedMethods)
Set the set of allowed `HTTP methods`, as specified by the `Allow` header.

### getAllow

public Set<HttpMethod> getAllow()
Return the set of allowed `HTTP methods`, as specified by the `Allow` header.

Returns an empty set when the allowed methods are unspecified.

### setBasicAuth

public void setBasicAuth(String username, String password)
Set the value of the Authorization header to Basic Authentication based on the given username and password.

Note that this method only supports characters in the `ISO-8859-1` character set.

Parameters:
  `username` - the username
  `password` - the password
Throws:
  `IllegalArgumentException` - if either `user` or `password` contain characters that cannot be encoded to ISO-8859-1
Since:
  5.1
See Also:
  - `setBasicAuth(String)`
  - `setBasicAuth(String, String, Charset)`
  - `encodeBasicAuth(String, String, Charset)`
  - RFC 7617

### setBasicAuth

public void setBasicAuth(String username, String password, @Nullable Charset charset)
Set the value of the Authorization header to Basic Authentication based on the given username and password.

Parameters:
  `username` - the username
  `password` - the password
  `charset` - the charset to use to convert the credentials into an octet sequence. Defaults to ISO-8859-1.
Throws:
  `IllegalArgumentException` - if `username` or `password` contains characters that cannot be encoded to the given charset
Since:
  5.1
See Also:
  - `setBasicAuth(String)`
  - `setBasicAuth(String, String)`
  - `encodeBasicAuth(String, String, Charset)`
  - RFC 7617

### setBasicAuth

public void setBasicAuth(String encodedCredentials)
Set the value of the Authorization header to Basic Authentication based on the given encoded credentials.

Favor this method over `setBasicAuth(String, String)` and `setBasicAuth(String, String, Charset)` if you wish to cache the encoded credentials.

Parameters:
  `encodedCredentials` - the encoded credentials
Throws:
  `IllegalArgumentException` - if supplied credentials string is `null` or blank
Since:
  5.2
See Also:
  - `setBasicAuth(String, String)`
  - `setBasicAuth(String, String, Charset)`
  - `encodeBasicAuth(String, String, Charset)`
  - RFC 7617

### setBearerAuth

public void setBearerAuth(String token)
Set the value of the Authorization header to the given Bearer token.

Parameters:
  `token` - the Base64 encoded token
Since:
  5.1
See Also:
  - RFC 6750

### setCacheControl

public void setCacheControl(CacheControl cacheControl)
Set a configured `CacheControl` instance as the new value of the `Cache-Control` header.

Since:
  5.0.5

### setCacheControl

public void setCacheControl(@Nullable String cacheControl)
Set the (new) value of the `Cache-Control` header.

### getCacheControl

@Nullable public String getCacheControl()
Return the value of the `Cache-Control` header.

### setConnection

public void setConnection(String connection)
Set the (new) value of the `Connection` header.

### setConnection

public void setConnection(List<String> connection)
Set the (new) value of the `Connection` header.

### getConnection

public List<String> getConnection()
Return the value of the `Connection` header.

### setContentDispositionFormData

public void setContentDispositionFormData(String name, @Nullable String filename)
Set the `Content-Disposition` header when creating a `"multipart/form-data"` request.

Applications typically would not set this header directly but rather prepare a `MultiValueMap<String, Object>`, containing an Object or a `Resource` for each part, and then pass that to the `RestTemplate` or `WebClient`.

Parameters:
  `name` - the control name
  `filename` - the filename (may be `null`)
See Also:
  - `getContentDisposition()`

### setContentDisposition

public void setContentDisposition(ContentDisposition contentDisposition)
Set the Content-Disposition header.

This could be used on a response to indicate if the content is expected to be displayed inline in the browser or as an attachment to be saved locally.

It can also be used for a `"multipart/form-data"` request. For more details see notes on `setContentDispositionFormData(java.lang.String, java.lang.String)`.

Since:
  5.0
See Also:
  - `getContentDisposition()`

### getContentDisposition

public ContentDisposition getContentDisposition()
Return a parsed representation of the Content-Disposition header.

Since:
  5.0
See Also:
  - `setContentDisposition(ContentDisposition)`

### setContentLanguage

public void setContentLanguage(@Nullable Locale locale)
Set the `Locale` of the content language, as specified by the Content-Language header.

Use `put(CONTENT_LANGUAGE, list)` if you need to set multiple content languages.

Since:
  5.0

### getContentLanguage

@Nullable public Locale getContentLanguage()
Get the first `Locale` of the content languages, as specified by the `Content-Language` header.

Use `getValuesAsList(String)` if you need to get multiple content languages.

Returns:
  the first `Locale` of the content languages, or `null` if unknown
Since:
  5.0

### setContentLength

public void setContentLength(long contentLength)
Set the length of the body in bytes, as specified by the `Content-Length` header.

Parameters:
  `contentLength` - content length (greater than or equal to zero)
Throws:
  `IllegalArgumentException` - if the content length is negative

### getContentLength

public long getContentLength()
Return the length of the body in bytes, as specified by the `Content-Length` header.

Returns -1 when the content-length is unknown.

### setContentType

public void setContentType(@Nullable MediaType mediaType)
Set the media type of the body, as specified by the `Content-Type` header.

### getContentType

@Nullable public MediaType getContentType()
Return the media type of the body, as specified by the `Content-Type` header.

Returns `null` when the `Content-Type` header is not set.

Throws:
  `InvalidMediaTypeException` - if the media type value cannot be parsed

### setDate

public void setDate(ZonedDateTime date)
Set the date and time at which the message was created, as specified by the `Date` header.

Since:
  5.2

### setDate

public void setDate(Instant date)
Set the date and time at which the message was created, as specified by the `Date` header.

Since:
  5.2

### setDate

public void setDate(long date)
Set the date and time at which the message was created, as specified by the `Date` header.

The date should be specified as the number of milliseconds since January 1, 1970 GMT.

### getDate

public long getDate()
Return the date and time at which the message was created, as specified by the `Date` header.

The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown.

Throws:
  `IllegalArgumentException` - if the value cannot be converted to a date

### setETag

public void setETag(@Nullable String tag)
Set the (new) entity tag of the body, as specified by the `ETag` header.

### getETag

@Nullable public String getETag()
Return the entity tag of the body, as specified by the `ETag` header.

### setExpires

public void setExpires(ZonedDateTime expires)
Set the duration after which the message is no longer valid, as specified by the `Expires` header.

Since:
  5.0.5

### setExpires

public void setExpires(Instant expires)
Set the date and time at which the message is no longer valid, as specified by the `Expires` header.

Since:
  5.2

### setExpires

public void setExpires(long expires)
Set the date and time at which the message is no longer valid, as specified by the `Expires` header.

The date should be specified as the number of milliseconds since January 1, 1970 GMT.

### getExpires

public long getExpires()
Return the date and time at which the message is no longer valid, as specified by the `Expires` header.

The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown.

See Also:
  - `getFirstZonedDateTime(String)`

### setHost

public void setHost(@Nullable InetSocketAddress host)
Set the (new) value of the `Host` header.

If the given port is `0`, the host header will only contain the host name.

Since:
  5.0

### getHost

@Nullable public InetSocketAddress getHost()
Return the value of the `Host` header, if available.

If the header value does not contain a port, the port in the returned address will be `0`.

Since:
  5.0

### setIfMatch

public void setIfMatch(String ifMatch)
Set the (new) value of the `If-Match` header.

Since:
  4.3

### setIfMatch

public void setIfMatch(List<String> ifMatchList)
Set the (new) value of the `If-Match` header.

Since:
  4.3

### getIfMatch

public List<String> getIfMatch()
Return the value of the `If-Match` header.

Throws:
  `IllegalArgumentException` - if parsing fails
Since:
  4.3

### setIfModifiedSince

public void setIfModifiedSince(ZonedDateTime ifModifiedSince)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setIfModifiedSince

public void setIfModifiedSince(Instant ifModifiedSince)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setIfModifiedSince

public void setIfModifiedSince(long ifModifiedSince)
Set the (new) value of the `If-Modified-Since` header.

The date should be specified as the number of milliseconds since January 1, 1970 GMT.

### getIfModifiedSince

public long getIfModifiedSince()
Return the value of the `If-Modified-Since` header.

The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown.

See Also:
  - `getFirstZonedDateTime(String)`

### setIfNoneMatch

public void setIfNoneMatch(String ifNoneMatch)
Set the (new) value of the `If-None-Match` header.

### setIfNoneMatch

public void setIfNoneMatch(List<String> ifNoneMatchList)
Set the (new) values of the `If-None-Match` header.

### getIfNoneMatch

public List<String> getIfNoneMatch()
Return the value of the `If-None-Match` header.

Throws:
  `IllegalArgumentException` - if parsing fails

### setIfUnmodifiedSince

public void setIfUnmodifiedSince(ZonedDateTime ifUnmodifiedSince)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setIfUnmodifiedSince

public void setIfUnmodifiedSince(Instant ifUnmodifiedSince)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setIfUnmodifiedSince

public void setIfUnmodifiedSince(long ifUnmodifiedSince)
Set the (new) value of the `If-Unmodified-Since` header.

The date should be specified as the number of milliseconds since January 1, 1970 GMT.

Since:
  4.3

### getIfUnmodifiedSince

public long getIfUnmodifiedSince()
Return the value of the `If-Unmodified-Since` header.

The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown.

Since:
  4.3
See Also:
  - `getFirstZonedDateTime(String)`

### setLastModified

public void setLastModified(ZonedDateTime lastModified)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setLastModified

public void setLastModified(Instant lastModified)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

Since:
  5.1.4

### setLastModified

public void setLastModified(long lastModified)
Set the time the resource was last changed, as specified by the `Last-Modified` header.

The date should be specified as the number of milliseconds since January 1, 1970 GMT.

### getLastModified

public long getLastModified()
Return the time the resource was last changed, as specified by the `Last-Modified` header.

The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown.

See Also:
  - `getFirstZonedDateTime(String)`

### setLocation

public void setLocation(@Nullable URI location)
Set the (new) location of a resource, as specified by the `Location` header.

### getLocation

@Nullable public URI getLocation()
Return the (new) location of a resource as specified by the `Location` header.

Returns `null` when the location is unknown.

### setOrigin

public void setOrigin(@Nullable String origin)
Set the (new) value of the `Origin` header.

### getOrigin

@Nullable public String getOrigin()
Return the value of the `Origin` header.

### setPragma

public void setPragma(@Nullable String pragma)
Set the (new) value of the `Pragma` header.

### getPragma

@Nullable public String getPragma()
Return the value of the `Pragma` header.

### setRange

public void setRange(List<HttpRange> ranges)
Sets the (new) value of the `Range` header.

### getRange

public List<HttpRange> getRange()
Return the value of the `Range` header.

Returns an empty list when the range is unknown.

### setUpgrade

public void setUpgrade(@Nullable String upgrade)
Set the (new) value of the `Upgrade` header.

### getUpgrade

@Nullable public String getUpgrade()
Return the value of the `Upgrade` header.

### setVary

public void setVary(List<String> requestHeaders)
Set the request header names (for example, "Accept-Language") for which the response is subject to content negotiation and variances based on the value of those request headers.

Parameters:
  `requestHeaders` - the request header names
Since:
  4.3

### getVary

public List<String> getVary()
Return the request header names subject to content negotiation.

Since:
  4.3

### setZonedDateTime

public void setZonedDateTime(String headerName, ZonedDateTime date)
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter. The equivalent of `set(String, String)` but for date headers.

Since:
  5.0

### setInstant

public void setInstant(String headerName, Instant date)
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter. The equivalent of `set(String, String)` but for date headers.

Since:
  5.1.4

### setDate

public void setDate(String headerName, long date)
Set the given date under the given header name after formatting it as a string using the RFC-1123 date-time formatter. The equivalent of `set(String, String)` but for date headers.

Since:
  3.2.4
See Also:
  - `setZonedDateTime(String, ZonedDateTime)`

### getFirstDate

public long getFirstDate(String headerName)
Parse the first header value for the given header name as a date, return -1 if there is no value, or raise `IllegalArgumentException` if the value cannot be parsed as a date.

Parameters:
  `headerName` - the header name
Returns:
  the parsed date header, or -1 if none
Since:
  3.2.4
See Also:
  - `getFirstZonedDateTime(String)`

### getFirstZonedDateTime

@Nullable public ZonedDateTime getFirstZonedDateTime(String headerName)
Parse the first header value for the given header name as a date, return `null` if there is no value, or raise `IllegalArgumentException` if the value cannot be parsed as a date.

Parameters:
  `headerName` - the header name
Returns:
  the parsed date header, or `null` if none
Since:
  5.0

### getValuesAsList

public List<String> getValuesAsList(String headerName)
Return all values of a given header name, even if this header is set multiple times.

This method supports double-quoted values, as described in RFC 9110, section 5.5.

Parameters:
  `headerName` - the header name
Returns:
  all associated values
Since:
  4.3

### clearContentHeaders

public void clearContentHeaders()
Remove the well-known `"Content-*"` HTTP headers.

Such headers should be cleared from the response if the intended body can't be written due to errors.

Since:
  5.2.3

### getETagValuesAsList

protected List<String> getETagValuesAsList(String name)
Retrieve a combined result from the field values of the ETag header.

Parameters:
  `name` - the header name
Returns:
  the combined result
Throws:
  `IllegalArgumentException` - if parsing fails
Since:
  4.3

### getFieldValues

@Nullable protected String getFieldValues(String headerName)
Retrieve a combined result from the field values of multivalued headers.

Parameters:
  `headerName` - the header name
Returns:
  the combined result
Since:
  4.3

### toCommaDelimitedString

protected String toCommaDelimitedString(List<String> headerValues)
Turn the given list of header values into a comma-delimited result.

Parameters:
  `headerValues` - the list of header values
Returns:
  a combined result with comma delimitation

### getFirst

@Nullable public String getFirst(String headerName)
Return the first header value for the given header name, if any.

Specified by:
  `getFirst` in interface `org.springframework.util.MultiValueMap<String,String>`
Parameters:
  `headerName` - the header name
Returns:
  the first header value, or `null` if none

### add

public void add(String headerName, @Nullable String headerValue)
Add the given, single header value under the given name.

Specified by:
  `add` in interface `org.springframework.util.MultiValueMap<String,String>`
Parameters:
  `headerName` - the header name
  `headerValue` - the header value
Throws:
  `UnsupportedOperationException` - if adding headers is not supported
See Also:
  - `put(String, List)`
  - `set(String, String)`

### addAll

public void addAll(String key, List<? extends String> values)

Specified by:
  `addAll` in interface `org.springframework.util.MultiValueMap<String,String>`

### addAll

public void addAll(org.springframework.util.MultiValueMap<String,String> values)

Specified by:
  `addAll` in interface `org.springframework.util.MultiValueMap<String,String>`

### set

public void set(String headerName, @Nullable String headerValue)
Set the given, single header value under the given name.

Specified by:
  `set` in interface `org.springframework.util.MultiValueMap<String,String>`
Parameters:
  `headerName` - the header name
  `headerValue` - the header value
Throws:
  `UnsupportedOperationException` - if adding headers is not supported
See Also:
  - `put(String, List)`
  - `add(String, String)`

### setAll

public void setAll(Map<String,String> values)

Specified by:
  `setAll` in interface `org.springframework.util.MultiValueMap<String,String>`

### toSingleValueMap

public Map<String,String> toSingleValueMap()

Specified by:
  `toSingleValueMap` in interface `org.springframework.util.MultiValueMap<String,String>`

### asSingleValueMap

public Map<String,String> asSingleValueMap()

Specified by:
  `asSingleValueMap` in interface `org.springframework.util.MultiValueMap<String,String>`

### isEmpty

public boolean isEmpty()

Specified by:
  `isEmpty` in interface `Map<String,List<String>>`

### containsKey

public boolean containsKey(Object key)

Specified by:
  `containsKey` in interface `Map<String,List<String>>`

### containsValue

public boolean containsValue(Object value)

Specified by:
  `containsValue` in interface `Map<String,List<String>>`

### get

@Nullable public List<String> get(Object key)

Specified by:
  `get` in interface `Map<String,List<String>>`

### put

public List<String> put(String key, List<String> value)

Specified by:
  `put` in interface `Map<String,List<String>>`

### remove

public List<String> remove(Object key)

Specified by:
  `remove` in interface `Map<String,List<String>>`

### putAll

public void putAll(Map<? extends String,? extends List<String>> map)

Specified by:
  `putAll` in interface `Map<String,List<String>>`

### clear

public void clear()

Specified by:
  `clear` in interface `Map<String,List<String>>`

### putIfAbsent

public List<String> putIfAbsent(String key, List<String> value)

Specified by:
  `putIfAbsent` in interface `Map<String,List<String>>`

### size

public int size()
Return the number of headers in the collection. This can be inflated, see `class level javadoc`.

Specified by:
  `size` in interface `Map<String,List<String>>`

### keySet

public Set<String> keySet()
Return a `Set` view of header names. This can include multiple casing variants of a given header name, see `class level javadoc`.

Specified by:
  `keySet` in interface `Map<String,List<String>>`

### values

public Collection<List<String>> values()
Return a `Collection` view of all the header values, reconstructed from iterating over the `keySet()`. This can include duplicates if multiple casing variants of a given header name are tracked, see `class level javadoc`.

Specified by:
  `values` in interface `Map<String,List<String>>`

### entrySet

public Set<Map.Entry<String,List<String>>> entrySet()
Return a `Set` views of header entries, reconstructed from iterating over the `keySet()`. This can include duplicate entries if multiple casing variants of a given header name are tracked, see `class level javadoc`.

Specified by:
  `entrySet` in interface `Map<String,List<String>>`
See Also:
  - `headerSet()`

### forEach

public void forEach(BiConsumer<? super String,? super List<String>> action)
Perform an action over each header, as when iterated via `entrySet()`. This can include duplicate entries if multiple casing variants of a given header name are tracked, see `class level javadoc`.

Specified by:
  `forEach` in interface `Map<String,List<String>>`
Parameters:
  `action` - the action to be performed for each entry

### headerSet

public Set<Map.Entry<String,List<String>>> headerSet()
Return a view of the headers as an entry `Set` of key-list pairs. Both `Iterator.remove()` and `Map.Entry.setValue(V)` are supported and mutate the headers.

This collection is guaranteed to contain one entry per header name even if the backing structure stores multiple casing variants of names, at the cost of first copying the names into a case-insensitive set for filtering the iteration.

Returns:
  a `Set` view that iterates over all headers in a case-insensitive manner
Since:
  6.1.15

### equals

public boolean equals(@Nullable Object other)

Specified by:
  `equals` in interface `Map<String,List<String>>`
Overrides:
  `equals` in class `Object`

### hashCode

public int hashCode()

Specified by:
  `hashCode` in interface `Map<String,List<String>>`
Overrides:
  `hashCode` in class `Object`

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### readOnlyHttpHeaders

public static HttpHeaders readOnlyHttpHeaders(org.springframework.util.MultiValueMap<String,String> headers)
Apply a read-only `HttpHeaders` wrapper around the given headers, if necessary.

Also caches the parsed representations of the "Accept" and "Content-Type" headers.

Parameters:
  `headers` - the headers to expose
Returns:
  a read-only variant of the headers, or the original headers as-is (in case it happens to be a read-only `HttpHeaders` instance already)
Since:
  5.3

### readOnlyHttpHeaders

public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers)
Apply a read-only `HttpHeaders` wrapper around the given headers, if necessary.

Also caches the parsed representations of the "Accept" and "Content-Type" headers.

Parameters:
  `headers` - the headers to expose
Returns:
  a read-only variant of the headers, or the original headers as-is if already read-only

### writableHttpHeaders

@Deprecated(since="6.2", forRemoval=true) public static HttpHeaders writableHttpHeaders(HttpHeaders headers)
Deprecated, for removal: This API element is subject to removal in a future version.
as of 6.2 in favor of `HttpHeaders(MultiValueMap)`.
Remove any read-only wrapper that may have been previously applied around the given headers via `readOnlyHttpHeaders(HttpHeaders)`.

Once the writable instance is mutated, the read-only instance is likely to be out of sync and should be discarded.

Parameters:
  `headers` - the headers to expose
Returns:
  a writable variant of the headers, or the original headers as-is
Since:
  5.1.1

### formatHeaders

public static String formatHeaders(org.springframework.util.MultiValueMap<String,String> headers)
Helps to format HTTP header values, as HTTP header values themselves can contain comma-separated values, can become confusing with regular `Map` formatting that also uses commas between entries.

Additionally, this method displays the native list of header names with the mention `with native header names` if the underlying implementation stores multiple casing variants of header names (see `class level javadoc`).

Parameters:
  `headers` - the headers to format
Returns:
  the headers to a String
Since:
  5.1.4

### encodeBasicAuth

public static String encodeBasicAuth(String username, String password, @Nullable Charset charset)
Encode the given username and password into Basic Authentication credentials.

The encoded credentials returned by this method can be supplied to `setBasicAuth(String)` to set the Basic Authentication header.

Parameters:
  `username` - the username
  `password` - the password
  `charset` - the charset to use to convert the credentials into an octet sequence. Defaults to ISO-8859-1.
Throws:
  `IllegalArgumentException` - if `username` or `password` contains characters that cannot be encoded to the given charset
Since:
  5.2
See Also:
  - `setBasicAuth(String)`
  - `setBasicAuth(String, String)`
  - `setBasicAuth(String, String, Charset)`
  - RFC 7617