Acceder al contenido principal

CORS y Symfony

Volver a Blog

CORS y Symfony

21 Feb 022
CORS y Symfony
Luis Martín

Symfony

Cuando realizamos peticiones desde un dominio a otro distinto existe el mecanismo CORS (Intercambio de Recursos de Origen Cruzado) para gestionar los permisos a los recursos de un servidor.

Petición simple

Un agente crea una petición CORS en la que espera una cabecera en la respuesta Access-Control-Allow-Origin la cual indica desde donde se puede realizar esta llamada

El servidor responde con las cabeceras que indican que se puede acceder con el recurso

  • Access-Control-Allow-Origin: Dominio que se admite para el recurso solicitado, se pueden usar astériscos com wildcards
  • Access-Control-Allow-Methods: Lista de métodos separados por coma que se admiten para el recurso solicitado, hay que tener en cuenta que el OPTIONS es obligatorio para que se puedan ejecutar las llamadas con preflight (GET, PUT, OPTIONS).
  • Access-Control-Allow-Headers: Cabeceras que se admiten para el recurso solicitado
  • Access-Control-Max-Age: Tiempo en segundos en los que la llamada preflight es válida

Petición con preflight

Si el agente que hace la petición considera que no es seguro hacer una petición simple hará una petición con preflight en la que se hace una llamada previa de tipo OPTIONS en la que se avalua si la llamada es segura, el agenete incluirá en la petición las siguientes cabeceras:

  • Origin: Origen de nuestra petición.
  • Access-Control-Request-Method: Método a ejecutar.
  • Access-Control-Request-Headers: Cabeceras que queramos añadir

Solicitudes con credenciales

Si queremos incluir credenciales que usamos en un dominio para la petición cruzada hay que indicar en la petición que así se desea, esto hará que se incluya la cabecera Cookie.
El servidor tiene que estar configurado para responder con al cabecera Access-Control-Allow-Credentials a true y no puede tener un wildcard como valor de Access-Control-Allow-Origin

Uso en Symfony

El objeto Response incluido en el namespace Symfony\Component\HttpFoundation, nos permite añadir añadir cabeceras a nuestra respuesta mediante el uso de $response->headers->set($nombre, $valor)

 

Comentarios

Añadir nuevo comentario