Web/API/Headers

From Get docs


The Headers interface of the Fetch API allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing headers from the list of the request's headers. A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.  You can add to this using methods like append() (see Examples.) In all methods of this interface, header names are matched by case-insensitive byte sequence. 

For security reasons, some headers can only be controlled by the user agent. These headers include the forbidden header names  and forbidden response header names.

A Headers object also has an associated guard, which takes a value of immutable, request, request-no-cors, response, or none. This affects whether the set(), delete(), and append() methods will mutate the header. For more information see Guard.

You can retrieve a Headers object via the Request.headers and Response.headers properties, and create a new Headers object using the Headers.Headers() constructor.

An object implementing Headers can directly be used in a for...of structure, instead of entries(): for (var p of myHeaders) is equivalent to for (var p of myHeaders.entries()).

Note: you can find more out about the available headers by reading our HTTP headers reference.


Constructor

Headers()
Creates a new Headers object.

Methods

Headers.append()
Appends a new value onto an existing header inside a Headers object, or adds the header if it does not already exist.
Headers.delete()
Deletes a header from a Headers object.
Headers.entries()
Returns an iterator allowing to go through all key/value pairs contained in this object.
Headers.forEach()
Executes a provided function once for each array element.
Headers.get()
Returns a ByteString sequence of all the values of a header within a Headers object with a given name.
Headers.has()
Returns a boolean stating whether a Headers object contains a certain header.
Headers.keys()
Returns an iterator allowing you to go through all keys of the key/value pairs contained in this object.
Headers.set()
Sets a new value for an existing header inside a Headers object, or adds the header if it does not already exist.
Headers.values()
Returns an iterator allowing you to go through all values of the key/value pairs contained in this object.

Note: To be clear, the difference between Headers.set() and Headers.append() is that if the specified header does already exist and does accept multiple values, Headers.set() will overwrite the existing value with the new one, whereas Headers.append() will append the new value onto the end of the set of values. See their dedicated pages for example code.


Note: All of the Headers methods will throw a TypeError if you try to pass in a reference to a name that isn't a valid HTTP Header name. The mutation operations will throw a TypeError if the header has an immutable Guard. In any other failure case they fail silently.


Note: When Header values are iterated over, they are automatically sorted in lexicographical order, and values from duplicate header names are combined.


Obsolete methods

Headers.getAll()
Used to return an array of all the values of a header within a Headers object with a given name; this method has now been deleted from the spec, and Headers.get() now returns all values of a given name instead of just the first one.

Examples

In the following snippet, we create a new header using the Headers() constructor, add a new header to it using append(), then return that header value using get():

var myHeaders = new Headers();

myHeaders.append('Content-Type', 'text/xml');
myHeaders.get('Content-Type') // should return 'text/xml'

The same can be achieved by passing an array of arrays or an object literal to the constructor:

var myHeaders = new Headers({
    'Content-Type': 'text/xml'
});

// or, using an array of arrays:
myHeaders = new Headers([
    ['Content-Type', 'text/xml']
]);

myHeaders.get('Content-Type') // should return 'text/xml'

Specifications

Specification Status Comment
FetchThe definition of 'Headers' in that specification. Living Standard

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
Headers

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support ≤18

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

Full support 10.1

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

Full support 44

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

Headers() constructor

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge Full support ≤79


Full support ≤79


Full support ≤79

Disabled'

Disabled' From version ≤79: this feature is behind the Experimental Web Platform Features preference.

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

Full support 10.1

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

append

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support 14

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

Full support 10.1

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

delete

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support 14

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

Full support 10.1

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

entries

Experimental'

Chrome

Full support 45

Edge

Full support 16

Firefox

Full support 44

IE

No support No

Opera

Full support 32

Safari

?

WebView Android

Full support 45

Chrome Android

Full support 45

Firefox Android

Full support 44

Opera Android

Full support 32

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

get

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support 14

Firefox Full support 52

Notes'

Full support 52

Notes'

Notes' Prior to Firefox 52, get() only returned the first value in the specified header, with getAll() returning all values. From 52 onwards, get() now returns all values and getAll() has been deleted. Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

Full support 10.1

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

getAll

Experimental'Deprecated'Non-standard'

Chrome

No support 42 — 60

Edge

No support ≤18 — 79

Firefox No support 39 — 52


No support 39 — 52


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera

No support 29 — 47

Safari

No support No

WebView Android

No support 42 — 60

Chrome Android

No support 42 — 60

Firefox Android

No support No

Opera Android

No support 29 — 44

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

has

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support 14

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

No support No

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

keys

Experimental'

Chrome

Full support 45

Edge

Full support 16

Firefox

Full support 44

IE

No support No

Opera

Full support 32

Safari

?

WebView Android

Full support 45

Chrome Android

Full support 45

Firefox Android

Full support 44

Opera Android

Full support 32

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

Lexicographical sorting, and values from duplicate header names combined when iterated. Chrome

?

Edge

?

Firefox

Full support 44

IE

No support No

Opera

Full support 28

Safari

No support No

WebView Android

?

Chrome Android

?

Firefox Android

No support No

Opera Android

?

Safari iOS

No support No

Samsung Internet Android

?

set

Experimental'

Chrome Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Edge

Full support 14

Firefox Full support 39


Full support 39


Full support 34

Disabled'

Disabled' From version 34: this feature is behind the dom.fetch.enabled preference. To change preferences in Firefox, visit about:config.

IE

No support No

Opera Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari

No support No

WebView Android

Full support 42

Chrome Android Full support 42


Full support 42


Full support 41

Disabled'

Disabled' From version 41: this feature is behind the Experimental Web Platform Features preference. To change preferences in Chrome, visit chrome://flags.

Firefox Android

No support No

Opera Android Full support 29


Full support 29


Full support 28

Disabled'

Disabled' From version 28: this feature is behind the Experimental Web Platform Features preference.

Safari iOS

No support No

Samsung Internet Android

Full support 4.0

values

Experimental'

Chrome

Full support 45

Edge

Full support 16

Firefox

Full support 44

IE

No support No

Opera

Full support 32

Safari

?

WebView Android

Full support 45

Chrome Android

Full support 45

Firefox Android

Full support 44

Opera Android

Full support 32

Safari iOS

No support No

Samsung Internet Android

Full support 5.0

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
Experimental. Expect behavior to change in the future.'
Experimental. Expect behavior to change in the future.
Non-standard. Expect poor cross-browser support.'
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.'
Deprecated. Not for use in new websites.
See implementation notes.'
See implementation notes.
User must explicitly enable this feature.'
User must explicitly enable this feature.


See also

Headers by Mozilla Contributors is licensed under CC-BY-SA 2.5.