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 seRefererpossiede la stessa informazione? - È possibile che non ci sia
RefereroOrigin, 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.