retour au cours

Pourquoi avons-nous besoin d'Origin ?

importance: 5

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 :

  1. Pourquoi Origin est nécessaire, si Referer a encore plus d’informations ?
  2. Est-il possible qu’il n’y ait pas de Referer ou Origin, 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.