Uso compartido de recursos multiorigen (CORS)

La política de mismo origen es una política de seguridad para las aplicaciones web del lado del cliente (como los navegadores web) que evita interacciones entre recursos de diferentes orígenes. Si bien es útil para prevenir comportamientos maliciosos, esta medida de seguridad también evita interacciones legítimas entre orígenes conocidos. Por ejemplo, una secuencia de comandos en una página alojada en App Engine en example.appspot.com podría necesitar usar los recursos almacenados en un depósito de Cloud Storage en example.storage.googleapis.com. Sin embargo, dado que estos son dos orígenes diferentes desde la perspectiva del navegador, este no permitirá que una secuencia de comandos de example.appspot.com obtenga recursos de example.storage.googleapis.com.

Para sortear esta limitación, el Consorcio World Wide Web (W3C) desarrolló la especificación de Uso compartido de recursos multiorigen (CORS). Cloud Storage es compatible con esta especificación porque te permite configurar tus depósitos a fin de que admitan CORS. Para continuar con el ejemplo anterior, puedes configurar el depósito example.storage.googleapis.com a fin de que un navegador pueda compartir sus recursos con secuencias de comandos de example.appspot.com.

Cómo funciona CORS

Hay dos tipos de solicitudes de CORS: simples y con verificación previa. Una solicitud simple se puede iniciar de forma directa. Una solicitud con verificación previa debe enviar una solicitud preliminar de “verificación previa” al servidor para obtener permiso antes de que la solicitud principal pueda continuar. Una solicitud tiene verificación previa si se cumple alguna de las siguientes circunstancias:

  • Usa métodos distintos de GET, HEAD o POST.
  • Usa el método POST con un Content-Type distinto de text/plain, application/x-www-form-urlencoded o multipart/form-data.
  • Establece encabezados personalizados.

El siguiente proceso ocurre cuando un navegador realiza una solicitud simple a Cloud Storage:

  1. El navegador agrega el encabezado Origin a la solicitud. El encabezado Origin contiene el origen del recurso que busca compartir los recursos del otro dominio, por ejemplo, Origin:http://www.example.appspot.com.

  2. Cloud Storage compara el método HTTP de la solicitud y el valor del encabezado Origin con la información de Métodos y Orígenes en la configuración de CORS del depósito de destino para ver si hay coincidencias. Si las hay, Cloud Storage incluye el encabezado Access-Control-Allow-Origin en su respuesta. El encabezado Access-Control-Allow-Origin contiene el valor del encabezado Origin de la solicitud inicial.

  3. El navegador recibe la respuesta y verifica si el valor de Access-Control-Allow-Origin coincide con el dominio especificado en la solicitud original. Si coinciden, la solicitud tiene éxito. Si no coinciden o si el encabezado Access-Control-Allow-Origin no está presente en la respuesta, la solicitud falla.

Una solicitud con verificación previa realiza los siguientes pasos primero. Si tiene éxito, luego sigue el mismo proceso que una solicitud simple:

  1. El navegador envía una solicitud OPTIONS que contiene Requested Method y Requested Headers de la solicitud principal.

  2. El servidor responde con los valores de los encabezados y métodos HTTP que permite el recurso de destino. Si alguno de los valores de método o encabezado en la solicitud de verificación previa no se encuentran en el conjunto de métodos y encabezados que permite el recurso de destino, la solicitud falla y la solicitud principal no se envía.

Esta es una descripción muy simplificada de CORS. Para obtener una descripción más completa, consulta la especificación del Uso compartido de recursos multiorigen.

Compatibilidad de Cloud Storage con CORS

Cloud Storage solo te permite establecer la configuración de CORS al nivel del depósito. Puedes establecer la configuración de CORS para un depósito con la herramienta de línea de comandos de gsutil, la API de XML o la API de JSON. Si deseas obtener más información sobre la configuración de CORS en un depósito, consulta Configura el Uso compartido de recursos multiorigen (CORS). Para obtener más información sobre los elementos de configuración de CORS, consulta Configura CORS de depósitos.

Puedes usar cualquiera de las siguientes URL de solicitud a la API de XML para obtener una respuesta de Cloud Storage que contiene los encabezados de CORS:

storage.googleapis.com/[BUCKET_NAME]
[BUCKET_NAME].storage.googleapis.com

Para obtener información sobre las URL de solicitud a la API de XML, consulta Solicita extremos.

Compatibilidad con CORS del lado del cliente

La mayoría de los navegadores usan el objeto XMLHttpRequest para realizar una solicitud de dominio múltiple. XMLHttpRequest se encarga de todo el trabajo de insertar los encabezados correctos y manejar la interacción de CORS con el servidor. No necesitas agregar ningún código nuevo para aprovechar la compatibilidad de los depósitos de Cloud Storage con CORS.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.