org.springframework.http

## Class HttpHeaders

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

- All Implemented Interfaces:
    Serializable, Map<String,List<String>>, MultiValueMap<String,String>
  Direct Known Subclasses:
    WebSocketHttpHeaders

      public class HttpHeaders
      extends Object
      implements 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` generally treats header names in a case-insensitive manner.

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

- - ### Nested Class Summary

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

      `Map.Entry<K,V>`

  - ### Field Summary

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HttpHeaders()` Construct a new, empty instance of the `HttpHeaders` object.
    `HttpHeaders(MultiValueMap<String,String> headers)` Construct a new `HttpHeaders` instance backed by an existing map.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `add(String headerName, String headerValue)` Add the given, single header value under the given name.
    `void` | `addAll(MultiValueMap<String,String> values)` Add all the values of the given `MultiValueMap` to the current values.
    `void` | `addAll(String key, List<? extends String> values)` Add all the values of the given list to the current list of values for the given key.
    `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()`
    `boolean` | `equals(Object other)`
    `static String` | `formatHeaders(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()`
    `boolean` | `isEmpty()`
    `Set<String>` | `keySet()`
    `List<String>` | `put(String key, List<String> value)`
    `void` | `putAll(Map<? extends String,? extends List<String>> map)`
    `static HttpHeaders` | `readOnlyHttpHeaders(HttpHeaders headers)` Apply a read-only `HttpHeaders` wrapper around the given headers, if necessary.
    `static HttpHeaders` | `readOnlyHttpHeaders(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(Duration maxAge)` Set the (new) value of the `Access-Control-Max-Age` response header.
    `void` | `setAccessControlMaxAge(long 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)` Set the given values under.
    `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(CacheControl cacheControl)` Set a configured `CacheControl` instance as the new value of the `Cache-Control` header.
    `void` | `setCacheControl(String cacheControl)` Set the (new) value of the `Cache-Control` header.
    `void` | `setConnection(List<String> connection)` Set the (new) value of the `Connection` header.
    `void` | `setConnection(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(Instant date)` Set the date and time at which the message was created, as specified by the `Date` 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(ZonedDateTime date)` Set the date and time at which the message was created, as specified by the `Date` header.
    `void` | `setETag(String etag)` Set the (new) entity tag of the body, as specified by the `ETag` 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(long 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(List<String> ifMatchList)` Set the (new) value of the `If-Match` header.
    `void` | `setIfMatch(String ifMatch)` Set the (new) value of the `If-Match` header.
    `void` | `setIfModifiedSince(Instant ifModifiedSince)` Set the time the resource was last changed, as specified by the `Last-Modified` header.
    `void` | `setIfModifiedSince(long ifModifiedSince)` Set the (new) value of the `If-Modified-Since` header.
    `void` | `setIfModifiedSince(ZonedDateTime ifModifiedSince)` Set the time the resource was last changed, as specified by the `Last-Modified` header.
    `void` | `setIfNoneMatch(List<String> ifNoneMatchList)` Set the (new) values of the `If-None-Match` header.
    `void` | `setIfNoneMatch(String ifNoneMatch)` Set the (new) value of the `If-None-Match` header.
    `void` | `setIfUnmodifiedSince(Instant ifUnmodifiedSince)` Set the time the resource was last changed, as specified by the `Last-Modified` header.
    `void` | `setIfUnmodifiedSince(long ifUnmodifiedSince)` Set the (new) value of the `If-Unmodified-Since` 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(Instant lastModified)` Set the time the resource was last changed, as specified by the `Last-Modified` header.
    `void` | `setLastModified(long 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 (e.g.
    `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()`
    `protected String` | `toCommaDelimitedString(List<String> headerValues)` Turn the given list of header values into a comma-delimited result.
    `Map<String,String>` | `toSingleValueMap()` Return a `Map` with the first values contained in this `MultiValueMap`.
    `String` | `toString()`
    `Collection<List<String>>` | `values()`
    `static HttpHeaders` | `writableHttpHeaders(HttpHeaders headers)` Remove any read-only wrapper that may have been previously applied around the given headers via `readOnlyHttpHeaders(HttpHeaders)`.

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

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

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

      `addIfAbsent`

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

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

- - ### Field Detail

    - #### 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 Detail

    - #### HttpHeaders

          public HttpHeaders()

      Construct a new, empty instance of the `HttpHeaders` object.

      This is the common constructor, using a case-insensitive map structure.

    - #### HttpHeaders

          public HttpHeaders(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 Detail

    - #### 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.

    - #### 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 etag)

      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 (e.g. "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.
      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 `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 `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)

      Description copied from interface: `MultiValueMap`
      Add all the values of the given list to the current list of values for the given key.
      Specified by:
        `addAll` in interface `MultiValueMap<String,String>`
      Parameters:
        `key` - they key
        `values` - the values to be added

    - #### addAll

          public void addAll(MultiValueMap<String,String> values)

      Description copied from interface: `MultiValueMap`
      Add all the values of the given `MultiValueMap` to the current values.
      Specified by:
        `addAll` in interface `MultiValueMap<String,String>`
      Parameters:
        `values` - the values to be added

    - #### set

          public void set(String headerName,
                          @Nullable
                          String headerValue)

      Set the given, single header value under the given name.
      Specified by:
        `set` in interface `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)

      Description copied from interface: `MultiValueMap`
      Set the given values under.
      Specified by:
        `setAll` in interface `MultiValueMap<String,String>`
      Parameters:
        `values` - the values.

    - #### toSingleValueMap

          public Map<String,String> toSingleValueMap()

      Description copied from interface: `MultiValueMap`
      Return a `Map` with the first values contained in this `MultiValueMap`.
      Specified by:
        `toSingleValueMap` in interface `MultiValueMap<String,String>`
      Returns:
        a single value representation of this map

    - #### size

          public int size()

      Specified by:
        `size` in interface `Map<String,List<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>>`

    - #### keySet

          public Set<String> keySet()

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

    - #### values

          public Collection<List<String>> values()

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

    - #### entrySet

          public Set<Map.Entry<String,List<String>>> entrySet()

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

    - #### 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(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

    - #### writableHttpHeaders

          public static HttpHeaders writableHttpHeaders(HttpHeaders headers)

      Remove any read-only wrapper that may have been previously applied around the given headers via `readOnlyHttpHeaders(HttpHeaders)`.
      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(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.
      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