¿Por que necesitamos el origen (Origin)?
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:
- ¿Por qué la cabecera
Origin
es necesaria, siReferer
contiene incluso más información? - ¿Es posible que no se incluya
Referer
uOrigin
, 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.