K čemu potřebujeme Origin?
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í:
- K čemu je nutný
Origin, kdyžRefererobsahuje ještě více informací? - Je možné, aby v požadavku nebyl žádný
RefererneboOrigin, 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.