HTTPQUERY
Русский

Origin

Применение

Браузеры добавляют заголовок Origin к межисточниковым запросам, а также к запросам в пределах одного источника, вызванным определёнными методами или API. Заголовок указывает, откуда исходит запрос, давая серверу информацию, необходимую для применения политик контроля доступа.

Заголовок присутствует во всех CORS-запросах (включая предварительные), при отправке форм методом POST и в запросах, инициированных Fetch API или XMLHttpRequest. Браузер не включает этот заголовок в навигационные запросы GET или HEAD в пределах того же источника.

В отличие от заголовка Referer, Origin никогда не содержит путь или строку запроса, что делает это значение более бережным к приватности. Заголовок Sec-Fetch-Site даёт дополняющий сигнал, классифицируя запрос как same-origin, same-site, cross-site или none.

scheme://host:port

Полный источник, состоящий из протокола, имени хоста и порта. Порт опускается, когда протокол использует порт по умолчанию (80 для HTTP, 443 для HTTPS).

Origin: https://example.com
Origin: https://api.example.re:8443

null

Отправляется, когда источник чувствителен с точки зрения приватности или непрозрачен. Значение null дают iframe в песочнице, URL со схемой data: и перенаправления между источниками.

Origin: null

Примечание

Серверы, опирающиеся на null при контроле доступа, создают брешь в безопасности. Одно и то же значение null используют множество несвязанных контекстов, поэтому доверие к нему открывает доступ всем им.

Пример

Межисточниковый POST из фронтенд-приложения содержит заголовок Origin, чтобы сервер проверил вызывающую сторону перед тем, как вернуть ответ с поддержкой CORS.

Запрос

POST /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Content-Type: application/json

Ответ

HTTP/1.1 201 Created
Access-Control-Allow-Origin: https://shop.example.re
Vary: Origin

Предварительный запрос OPTIONS несёт источник вместе с предполагаемым методом и заголовками.

Запрос

OPTIONS /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type