El intercambio de recursos de origen cruzado ( CORS ; del inglés - "compartir recursos entre diferentes fuentes") es una tecnología de navegadores modernosque le permite proporcionar páginas web con acceso a recursos de otro dominio .
Hay tres dominios que le permiten descargar recursos del servidor U. Para que esto sea posible, el servidor web U, que proporciona el contenido , solo necesita especificar una lista de dominios confiables en Access-Control-Allow-Origin encabezado de respuesta : A, B, C. Entonces para las páginas de estos dominios , no se aplicarán las restricciones del principio del mismo origen en las páginas solicitadas:
Access-Control-Allow-Origin: A, B, C
Después de eso, las páginas de los dominios A, B, C podrán descargar contenido del servidor U.
Para PHP , esto se hace llamando a la función header():
<?php header ( "Access-Control-Allow-Origin: http://example.com" ); ?>Para inicializar una solicitud de origen cruzado , el navegador del cliente agrega una indicación de Origen ( el dominio del sitio desde el que se origina la solicitud) a la solicitud HTTP . Por ejemplo, la página http://www.a.com/page.html intenta obtener datos de la página http://www.b.com/cors.txt. Si el navegador del cliente es compatible con la tecnología CORS, la solicitud se verá así:
OBTENER /cors.txt HTTP/1.1 Anfitrión: www.b.com Origen: www.a.comSi el servidor www.b.com permite recibir datos de www.a.com, la respuesta del servidor contendrá la línea:
Acceso-Control-Permitir-Origen: http://www.a.comSi falta esta línea en la respuesta del servidor , un navegador compatible con la tecnología CORS devolverá un código de error en lugar de datos.
En caso de que el servidor quiera permitir el acceso a páginas de cualquier dominio , puede especificar en la respuesta:
Acceso-Control-Permitir-Origen: *Si el servidor desea permitir el acceso a más de un dominio , la respuesta del servidor debe contener una línea Access-Control-Allow-Origin para cada dominio .
Acceso-Control-Permitir-Origen: http://www.a.com Acceso-Control-Permitir-Origen: http://www.b.com Acceso-Control-Permitir-Origen: http://www.c.comEn la práctica, se utiliza más a menudo un registro de varios dominios , separados por un espacio [1] :
Acceso-Control-Permitir-Origen: http://www.a.com http://www.b.com http://www.c.comLa tecnología CORS se puede utilizar como una alternativa más moderna y confiable a JSONP , ya que le permite aprovechar al máximo XMLHttpRequest y, a diferencia de JSONP, no es vulnerable a la inyección SQL . . Por otro lado, la tecnología CORS requiere un soporte especial en el código del navegador , mientras que JSONP no depende de este.