Pourquoi avons-nous besoin d'Origin ?
Comme vous le savez probablement, il y a un en-tête HTTP Referer
, qui contient généralement une URL de la page qui a initié une requête réseau.
Par exemple, lors de la récupération de http://google.com
à partir de http://javascript.info/some/url
, les en-têtes ressemblent à ceci :
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
Comme vous pouvez le voir, Referer
et Origin
sont présents.
Questions :
- Pourquoi
Origin
est nécessaire, siReferer
a encore plus d’informations ? - Est-il possible qu’il n’y ait pas de
Referer
ouOrigin
, ou est-ce incorrect ?
Nous avons besoin de Origin
, car parfois Referer
est absent. Par exemple, lorsque nous faisons un fetch
de la page HTTP à partir de la page HTTPS (accès moins sécurisé de plus sécurisé), il n’y a pas de Referer
.
Le Content Security Policy peut interdire l’envoi d’un Referer
.
Comme nous le verrons, fetch
a des options qui empêchent d’envoyer le Referer
et permettent même de le changer (dans le même site).
Par spécification, Referer
est un en-tête HTTP facultatif.
Précisément parce que Referer
n’est pas fiable, Origin
a été inventé. Le navigateur garantit une origine correcte pour les requêtes cross-origin.