Perchè è necessario Origin?
Come probabilmente saprai, l HTTP-header Referer
, contiene comunemente l’url della pagina dalla quale inizia la network request.
Per esempio, quando richiediamo http://google.com
da http://javascript.info/some/url
, le headers dovrebbero essere:
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
Come puoi vedere sia Referer
che Origin
sono presenti.
Le domande sono:
- Perché
Origin
è necessaria seReferer
possiede la stessa informazione? - È possibile che non ci sia
Referer
oOrigin
, oppure ciò sarebbe scorretto?
Abbiamo bisogno di Origin
, perché a volte Referer
è assente. Per esempio, quando richiediamo fetch
di una HTTP-page da HTTPS (accesso meno sicuro da uno più sicuro), non è presente Referer
.
La Content Security Policy potrebbe dimenticare di inviare un Referer
.
Come vedremo, fetch
ha opzioni che impediscono l’invio delReferer
e permettono persino di cambiarlo (all’interno dello stesso sito).
Da specifiche, Referer
è un HTTP-header opzionale.
Proprio perché “Referer” non è affidabile, è stato inventato “Origin”. Il browser garantisce la corretta “Origin” per le cross-origin requests.