zpět k lekci

K čemu potřebujeme Origin?

důležitost: 5

Jak pravděpodobně víte, existuje HTTP hlavička Referer, která obvykle obsahuje URL stránky, která vyvolala síťový požadavek.

Například když stahujeme http://google.com z http://javascript.info/some/url, hlavičky vypadají následovně:

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

Jak vidíte, je přítomen jak Referer, tak Origin.

Otázky zní:

  1. K čemu je nutný Origin, když Referer obsahuje ještě více informací?
  2. Je možné, aby v požadavku nebyl žádný Referer nebo Origin, nebo to není korektní?

Origin potřebujeme proto, že Referer někdy schází. Například když pomocí fetch stahujeme HTTP stránku z HTTPS (přistupujeme k méně bezpečné stránce z bezpečnější), Referer tam není.

Politika bezpečného obsahu (Content Security Policy) může poslání Referer zakázat.

Jak dále uvidíme, fetch obsahuje volby, které brání v poslání Referer a dokonce jej umožňují změnit (v rámci stejného sídla).

Podle specifikace je Referer nepovinná HTTP hlavička.

Origin byl vynalezen právě proto, že Referer je nespolehlivý. U požadavků jiného původu prohlížeč zaručuje korektní Origin.