JavaScript метод XMLHttpRequest.setRequestHeader()
Определение и применение
JavaScript метод setRequestHeader() объекта
XMLHttpRequest
задает значение заголовка HTTP запроса.
Если метод setRequestHeader() вызывается несколько раз с одним и тем же заголовком, то значения
объединяются в один заголовок запроса. Каждый раз, когда вы вызываете setRequestHeader() после первого
вызова, указанный текст добавляется в конец содержимого существующего заголовка через запятую и пробел
(", ").
Если заголовок Accept не был установлен с помощью этого метода, то заголовок Accept с типом
*/* отправляется с запросом при вызове метода
send().
По соображениям безопасности некоторые заголовки могут управляться только браузером (агентом пользователя). Это
запрещенные заголовки запроса, например Host, Cookie, Content-Length,
Referer и Origin, а также заголовки с префиксами Proxy- и Sec-.
Попытка задать такой заголовок молча игнорируется.
Поддержка браузерами
Спецификация: xhr.spec.whatwg
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
setRequestHeader | 1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
xhr.setRequestHeader(header, value);
Спецификация
Значения параметров
| Параметр | Описание |
|---|---|
header |
Имя заголовка, значение которого должно быть установлено. Обязательный параметр. |
value |
Значение, которое будет использовано в качестве тела заголовка. Обязательный параметр. |
Исключения
| Тип исключения | Описание |
|---|---|
InvalidStateError |
Возникает, если запрос не находится в состоянии OPENED (метод open() не вызывался)
или уже отправлен методом send().
|
SyntaxError |
Возникает, если имя или значение не соответствует синтаксису HTTP-заголовка. |
Пример использования
В следующем примере мы рассмотрим как с помощью метода setRequestHeader() задать значение
заголовка Content-Type (определяет MIME тип ресурса) HTTP запроса и отправить простой
текст на сервер методом POST.
function postTextMessage(url, data) {
let xhr = new XMLHttpRequest(); // инициализируем переменную новым объектом XMLHttpRequest
xhr.open("POST", url); // определяем параметры для запроса на определенный адрес
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); // задаем значение заголовка HTTP запроса (текстовые данные в кодировке UTF-8)
xhr.send(data); // отправляем запрос на сервер (используем значение параметра в качестве тела запроса)
}
В следующем примере мы рассмотрим как с помощью метода setRequestHeader() задать значение
заголовка Content-Type HTTP запроса и отправить данные формы на сервер методом POST.
function postFormData(url, data, callback) {
let xhr = new XMLHttpRequest(); // инициализируем переменную новым объектом XMLHttpRequest
xhr.open("POST", url); // определяем параметры для запроса на определенный адрес
xhr.onreadystatechange = function() { // обработчик событий, вызываемый при запуске события readystatechange (при каждом изменении свойства readyState)
// проверяем состояние запроса, числовой код состояния HTTP ответа и наличие переданной функции
if (this.readyState === 4 && this.status == 200 && callback) {
callback(xhr); // вызываем переданную в качестве параметра функцию
}
}
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // задаем значение заголовка HTTP запроса (значения кодируются в кортежах с ключом, разделенных символом '&', с '=' между ключом и значением)
xhr.send(data); // отправляем запрос на сервер (используем значение параметра в качестве тела запроса)
}
В следующем примере мы рассмотрим как с помощью метода setRequestHeader() задать значение
заголовка Content-Type HTTP запроса и отправить данные в формате
JSON
на сервер методом POST.
function postJSONData(url, data, callback) {
let xhr = new XMLHttpRequest(); // инициализируем переменную новым объектом XMLHttpRequest
xhr.open("POST", url); // определяем параметры для запроса на определенный адрес
xhr.onreadystatechange = function() { // обработчик событий, вызываемый при запуске события readystatechange (при каждом изменении свойства readyState)
// проверяем состояние запроса, числовой код состояния HTTP ответа и наличие переданной функции
if (this.readyState === 4 && this.status == 200 && callback) {
callback(xhr); // вызываем переданную в качестве параметра функцию
}
}
xhr.setRequestHeader("Content-Type", "application/json"); // задаем значение заголовка HTTP запроса (данные в формате JSON)
xhr.send(data); // отправляем запрос на сервер (используем значение параметра в качестве тела запроса)
}