Buscar..


Observaciones

El intercambio de recursos de origen cruzado está diseñado para permitir solicitudes dinámicas entre dominios, a menudo utilizando técnicas como AJAX . Mientras que las secuencias de comandos realizan la mayor parte del trabajo, el servidor HTTP debe admitir la solicitud utilizando los encabezados correctos.

Cliente: enviar una solicitud de intercambio de recursos de origen cruzado (CORS)

Se debe enviar una solicitud de origen cruzado que incluya el encabezado de Origin . Esto indica de donde se originó la solicitud. Por ejemplo, una solicitud de origen cruzado de http://example.com a http://example.org se vería así:

GET /cors HTTP/1.1
Host: example.org
Origin: example.com

El servidor utilizará este valor para determinar si la solicitud está autorizada.

Servidor: respondiendo a una solicitud CORS

La respuesta a una solicitud CORS debe incluir un encabezado Access-Control-Allow-Origin , que dicta qué orígenes pueden usar el recurso CORS. Este encabezado puede tomar uno de tres valores:

  • Un origen. Hacer esto solo permite solicitudes desde ese origen .
  • El personaje * . Esto permite solicitudes desde cualquier origen .
  • La cadena null . Esto no permite solicitudes de CORS .

Por ejemplo, al recibir una solicitud CORS del origen http://example.com , si example.com es un origen autorizado, el servidor enviaría esta respuesta:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.com

Una respuesta de cualquier origen también permitiría esta solicitud, es decir:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *

Permitir credenciales de usuario o sesión

Al permitir que las credenciales del usuario o la sesión del usuario se envíen con una solicitud CORS, el servidor puede conservar los datos del usuario en todas las solicitudes CORS. Esto es útil si el servidor necesita verificar si el usuario ha iniciado sesión antes de proporcionar datos (por ejemplo, solo realiza una acción si un usuario ha iniciado sesión; esto requeriría que la solicitud CORS se envíe con credenciales).

Esto se puede lograr en el lado del servidor para solicitudes con verificación previa, mediante el envío del encabezado Access-Control-Allow-Credentials en respuesta a la solicitud de verificación previa de OPTIONS . Tome el siguiente caso de una solicitud CORS para DELETE un recurso:

OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: DELETE
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Credentials: true

La línea Access-Control-Allow-Credentials: true indica que la siguiente solicitud DELETE CORS puede enviarse con las credenciales del usuario.

Solicitudes de verificación previa

Se permite una solicitud CORS básica para usar uno de solo dos métodos:

  • OBTENER
  • ENVIAR

y solo unos pocos encabezados selectos. Las solicitudes POST CORS pueden elegir adicionalmente solo entre tres tipos de contenido.

Para evitar este problema, las solicitudes que deseen utilizar otros métodos, encabezados o tipos de contenido deben emitir primero una solicitud de verificación previa, que es una solicitud de OPTIONS que incluye encabezados de solicitud de control de acceso. Por ejemplo, esta es una solicitud de verificación previa que verifica si el servidor aceptará una solicitud PUT que incluya un encabezado DNT :

OPTIONS /cors HTTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT

Servidor: respondiendo a las solicitudes de verificación previa

Cuando un servidor recibe una solicitud de verificación previa, debe verificar si es compatible con el método y los encabezados solicitados, y devolver una respuesta que indique su capacidad para respaldar la solicitud, así como cualquier otro dato permitido (como credenciales).

Estos están indicados en el control de acceso Permitir encabezados. El servidor también puede devolver un encabezado de Max-Age control de acceso, que indica cuánto tiempo se puede almacenar en caché la respuesta de verificación previa.

Esto es lo que podría parecer un ciclo de solicitud-respuesta para una solicitud de verificación previa:

OPTIONS /cors HHTP/1.1
Host: example.com
Origin: example.org
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: DNT
HTTP/1.1 200 OK
Access-Control-Allow-Origin: example.org
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: DNT


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow