назад до уроку

Навіщо нам Origin?

важливість: 5

Як ви, мабуть, знаєте, існує 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.

Питання:

  1. Навіщо потрібен Origin, якщо Referer містить ще більше інформації?
  2. Чи можливо, що немає Referer чи Origin, або ж це неправильно?

Нам потрібен Origin, тому що іноді Referer відсутній. Наприклад, коли ми запитуємо через fetch HTTP-сторінку з HTTPS (доступ до менш безпечного з більш безпечного), тоді немає Referer.

Content Security Policy може забороняти надсилання Referer.

Як ми побачимо, fetch має параметри, які забороняють надсилати Referer і навіть дозволяють змінювати його (в межах того самого сайту).

За специфікацією Referer є необов’язковим HTTP-заголовком.

Саме тому, що Referer є ненадійним, було винайдено Origin. Браузер гарантує правильне Origin для запитів між різними джерелами.