torna alle lezioni

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:

  1. Perché Origin è necessaria se Referer possiede la stessa informazione?
  2. È possibile che non ci sia Referer o Origin, 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.