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