Навіщо нам Origin?
Як ви, мабуть, знаєте, існує HTTP-заголовок Referer, який зазвичай містить URL-адресу сторінки, що ініціювала мережевий запит.
Наприклад, під час отримання http://google.com з http://javascript.info/some/url заголовки виглядають так:
Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: http://javascript.info
Referer: http://javascript.info/some/url
Як бачите, присутні і Referer, і Origin.
Питання:
- Навіщо потрібен
Origin, якщоRefererмістить ще більше інформації? - Чи можливо, що немає
RefererчиOrigin, або ж це неправильно?
Нам потрібен Origin, тому що іноді Referer відсутній. Наприклад, коли ми запитуємо через fetch HTTP-сторінку з HTTPS (доступ до менш безпечного з більш безпечного), тоді немає Referer.
Content Security Policy може забороняти надсилання Referer.
Як ми побачимо, fetch має параметри, які забороняють надсилати Referer і навіть дозволяють змінювати його (в межах того самого сайту).
За специфікацією Referer є необов’язковим HTTP-заголовком.
Саме тому, що Referer є ненадійним, було винайдено Origin. Браузер гарантує правильне Origin для запитів між різними джерелами.