regresar a la lección

¿Por que necesitamos el origen (Origin)?

importancia: 5

Como seguramente ya sepas, existe la cabecera HTTP Referer, la cual por lo general contiene la url del sitio que generó la solicitud.

Por ejemplo, cuando solicitamos la url http://google.com desde http://javascript.info/alguna/url, las cabeceras se ven de este modo:

Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: http://javascript.info
Referer: http://javascript.info/alguna/url

Tal como se puede ver, tanto Referer como Origin están presentes.

Las preguntas:

  1. ¿Por qué la cabecera Origin es necesaria, si Referer contiene incluso más información?
  2. ¿Es posible que no se incluya Referer u Origin, o que contengan datos incorrectos?

Necesitamos la cabecera Origin, ya que en algunos casos Referer no está presente. Por ejemplo, cuando realizamos un fetch a una página HTTP desde una HTTPS (acceder a un sitio menos seguro desde uno más seguro), en ese caso no tendremos el campo Referer.

La Política de seguridad de contenido puede prohibir el envío de Referer.

Como veremos, fetch tiene opciones con las que es posible evitar el envío de Referer e incluso permite su modificación (dentro del mismo sitio).

Por especificación, Referer es una cabecera HTTP opcional.

Por el hecho de que Referer no es confiable, la cabecera Origin ha sido creada. El navegador garantiza el envío correcto de Origin para las solicitudes de origen cruzado.