Cabeceras CORS (Cross Origin Resource Sharing)

Buenas a todos

Hoy estaba trabajando realizando pruebas con una aplicación de un cliente y su servidor Apache no tenía activada la cabecera Access-Control-Allow-Origin, por lo que todas las peticiones que intentaba realizar me daban error.

CORS (Cross Origin Resource Sharing) es un mecanismo que utiliza encabezados adicionales HTTP para permitir que un user agent obtenga permiso para acceder a recursos seleccionados desde un servidor, en un origen distinto (dominio), al que pertenece. Una aplicación crea una petición HTTP desde un origen distinto al dominio y este rechaza la petición. Imaginaros un API realizado en PHP con laravel y una aplicación móvil realizada en Phonegap, como era el caso de hoy.

Buscando información encontré que tenía que activar la autorización CORS en apache, para agregar la autorización CORS al encabezado, simplemente hay que modificar el archivo configuración de servidor (httpd.conf o apache.conf), o agregarlo dentro de un archivo .htaccess (Si lo agregamos a este fichero no hace falta realizar el resto del artículo):

  
Header set Access-Control-Allow-Origin "*"

Para asegurarse de que los cambios que hemos hecho son correctos, usaremos el comando

apachectl -t

Reiniciamos el servidor de apache si todo va bien

sudo service apache2 reload

Añadir encabezados requiere el uso de al librería mod_headers. Mod_headers está habilitado de forma predeterminada en Apache, sin embargo, es posible que en algunos clientes este desactivado. Se puede probar a ejecutar el comando

a2enmod headers

Por otro lado, sino tenemos acceso al servidor de apache, y trabajamos con Linux, podríamos añadir estas cabeceras al inicio de nuestra página

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Allow: GET, POST, PUT, DELETE");

En Laravel, podeis ver como hacerlo siguiendo el artículo de Joel Valdivia que os dejo aquí

Espero que os sirva de ayuda.
Un saludo a todos

Cabeceras CORS (Cross Origin Resource Sharing) Modificado: junio 25th, 2018 por Carlos González Gurrea
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5,00 de 5)
Cargando…

Centro de preferencias de privacidad

    Almacenamiento y acceso a información

    El almacenamiento de información o el acceso a información ya almacenada en tu dispositivo como identificadores de publicidad, identificadores de dispositivo, cookies y tecnologías similares.

    google.com

    Personalización

    La recopilación y procesado de información sobre tu uso de este servicio para posteriormente personalizar la publicidad y/o el contenido para ti en otros contextos, como otras webs o apps, con el tiempo. Habitualmente el contenido de la web o la app se usa para hacer deducciones sobre lo que te interesa, lo que define la selección futura de publicidad y/o contenido.

    google.com

    Selección de anuncios, entrega, informes

    La recopilación de información y la combinación con información anteriormente recopilada para seleccionar y presentarte publicidad y para medir la entrega y efectividad de esa publicidad. Esto incluye usar información recopilada anteriormente sobre tus intereses para seleccionar anuncios, procesar datos sobre qué anuncios se mostraron, con qué frecuencia se mostraron, cuando y dónde se mostraron y si llevaste a cabo alguna acción relacionada con el anuncio, como por ejemplo hacer clic en un anuncio o hacer una compra. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar publicidad y/o otros contenidos para ti en otros contextos, como webs o apps, con el tiempo.

    google.com

    Selecciones de contenido, entrega, informes

    La recopilación de información y combinación con información previamente recopilada para seleccionar y presentarte contenido y para medir la entrega y efectividad de ese contenido. Esto incluye el uso de información recopilada anteriormente sobre tus intereses para seleccionar contenido, procesar datos sobre qué contenido se mostró, con qué frecuencia o durante cuánto tiempo se mostró, dónde y cuándo se mostró y si llevaste a cabo alguna acción relacionada con el contenido, como por ejemplo hacer clic en contenido. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar contenido y/o publicidad para ti en otros contextos, como webs o apps, con el tiempo.

    google.com