Compatibilidad con versiones anteriores
En los días anteriores a que era posible enviar solicitudes HTTP desde JavaScript, no era necesario que los servidores web comprobaran desde qué sitio se originó la solicitud, por lo que no lo hicieron. Cuando JavaScript obtuvo esta capacidad, se tuvo que implementar de una manera que no rompiera la seguridad de los sitios web existentes. Por lo tanto, los navegadores asumieron la responsabilidad de asegurarse de que los datos de un sitio web no puedan ser accedidos por un sitio diferente. (Las solicitudes AJAX de origen cruzado simplemente no funcionarán).
Más tarde, se decidió que esta política era demasiado restrictiva y, por lo tanto, se creó el estándar CORS (Cross-Origin Resource Sharing). Una vez más, este estándar tenía que ser compatible con los servidores existentes, y esos servidores aún no comprobaban el encabezado Origin
. ¿Por qué lo harían? Los navegadores ya impidieron el acceso de origen cruzado a los datos del sitio automáticamente; no había necesidad de un cheque separado. Por lo tanto, CORS tenía que requerir que los sitios optaran explícitamente por el acceso de origen cruzado a una página específica. Requerir una opción de exclusión (mediante el rechazo de la solicitud si el encabezado Origin
es incorrecto), nuevamente, rompería la seguridad de los sitios existentes. Así nació el encabezado Access-Control-Allow-Origin
.
Sin embargo, incluso aparte de la compatibilidad con versiones anteriores, todavía hay un beneficio significativo al no requerir que los servidores verifiquen el encabezado Origin
. Para hacer que el acceso de origen cruzado requiera una opción, se garantiza que los desarrolladores y servidores web no comprometan accidentalmente su propia seguridad al no validar correctamente el encabezado Origin
Es seguro por defecto en lugar de "inseguro a menos que se asegure de que este encabezado particular esté configurado en el valor correcto".