Todos los productos
Search
Centro de documentos

Object Storage Service:Configure cross-origin resource sharing (CORS)

Última actualización: Sep 08, 2026

Los navegadores pueden bloquear las solicitudes de origen cruzado hacia Object Storage Service (OSS) debido a la política del mismo origen. Esta política restringe el acceso al mismo protocolo, dominio y puerto. Por ejemplo, una página en https://www.example.com https://example-bucket.oss-cn-hangzhou.aliyuncs.com/test.jpg.image Configure reglas de CORS para su bucket con el fin de autorizar a sitios web específicos a acceder directamente a los recursos de OSS.

Cómo funciona

Las solicitudes CORS se dividen en dos tipos: solicitudes simples, que se envían directamente, y solicitudes preflight, que requieren una verificación de autorización antes de la solicitud principal.

Se requiere una solicitud preflight si se cumple alguna de a continuación condiciones:

  • La solicitud utiliza un método distinto de GET, HEAD o POST.

  • La solicitud usa el método POST con un encabezado Content-Type diferente de text/plain, application/x-www-form-urlencoded o multipart/form-data.

  • La solicitud incluye encabezados personalizados, como x-oss-*.

Cuando un navegador envía una solicitud simple a OSS, ocurre el siguiente proceso:

  1. El navegador agrega el encabezado Origin a la solicitud. Este encabezado especifica el origen de la página que realiza la llamada; por ejemplo, Origin: https://www.example.com.

  2. OSS compara el método HTTP y el encabezado Origin de la solicitud con las reglas de CORS del bucket para encontrar una coincidencia. Si encuentra una, incluye el encabezado Access-Control-Allow-Origin en la respuesta. El valor de este encabezado corresponde al valor del encabezado Origin de la solicitud inicial.

  3. El navegador recibe la respuesta. Permite que la solicitud continúe solo si el encabezado Access-Control-Allow-Origin está presente y su valor coincide con el dominio de la página. De lo contrario, la solicitud falla.

Una solicitud preflight añade estos pasos antes del flujo de la solicitud simple. Si tiene éxito, continúa con el mismo proceso que una solicitud simple:

  1. El navegador envía una solicitud OPTIONS que incluye el método (Access-Control-Request-Method) y los encabezados (Access-Control-Request-Headers) de la solicitud principal prevista.

  2. OSS comprueba si el método y los encabezados de la solicitud están permitidos según la configuración de CORS. Si la solicitud preflight incluye algún método o encabezado no permitido por las reglas, la solicitud falla y no se envía la solicitud principal.

Cargar recursos de un sitio web estático

Un sitio web en https://www.example.com necesita cargar imágenes, CSS y archivos JS almacenados en un bucket de OSS.

Paso 1: Configurar una regla de CORS

Inicie sesión en la consola de OSS. Vaya a la página Content Security > CORS del bucket de destino y cree una regla de la siguiente manera:

Parámetro

Valor

Descripción

Origin

https://www.example.com

Restringe el acceso a este sitio web.

Allowed Methods

GET, HEAD

GET descarga recursos; HEAD valida las cachés.

Allowed Headers

Vacío

No es obligatorio, ya que las solicitudes simples no activan una solicitud preflight.

Exposed Headers

ETag, Content-Length

  • ETag permite que los navegadores validen las cachés mediante solicitudes HEAD. Si el objeto no cambió, el servidor devuelve una respuesta 304 Not Modified para evitar volver a descargarlo.

  • Content-Length sirve para mostrar el progreso de carga de los recursos en el frontend.

Cached Timeout (Seconds)

86400

Almacena en caché los resultados de las solicitudes preflight durante 24 horas.

Vary: Origin

Sin seleccionar

No es necesario cuando se usa un único origen específico.

Paso 2: Comprobar la configuración

Visite https://www.example.com y confirme que los recursos de OSS, como las imágenes, se cargan correctamente y que no hay errores de CORS en la consola del navegador.

Cargar archivos directamente desde el frontend

Un usuario en la página web https://app.example.com carga archivos, como avatares y documentos, directamente en OSS.

Paso 1: Configurar una regla de CORS

Inicie sesión en la consola de OSS. Vaya a la página Content Security > CORS del bucket de destino y cree una regla de la siguiente manera:

Parámetro

Valor

Descripción

Origin

https://app.example.com

Restringe las cargas a esta aplicación autorizada.

Allowed Methods

PUT, POST

PUT o POST son obligatorios para las cargas.

Allowed Headers

*

Por seguridad, las cargas directas usan firmas temporales (URL prefirmadas) en lugar de un encabezado Authorization fijo. El comodín admite diversos encabezados de SDK (por ejemplo, x-oss-meta-) sin introducir riesgos.

Exposed Headers

ETag, x-oss-request-id

  • ETag: identificador único de una carga de archivo correcta que se usa para verificaciones posteriores.

  • x-oss-request-id: se utiliza para solucionar problemas de cargas fallidas.

Cached Timeout (Seconds)

600

Una caché de 10 minutos equilibra la reducción de solicitudes preflight con actualizaciones rápidas de la configuración.

Vary: Origin

Seleccionado

Evita la contaminación de la caché de CDN en posibles despliegues multidominio.

Paso 2: Comprobar la configuración

Ejecute una operación de carga en la página https://app.example.com y confirme que el archivo se cargó correctamente en OSS y que no hay errores de CORS en la consola del navegador.

Compatibilidad con varios entornos

Varios subdominios de desarrollo, pruebas y producción, como dev.example.com y app.example.com, necesitan acceder a los mismos recursos de OSS.

Paso 1: Configurar una regla de CORS

Inicie sesión en la consola de OSS. Vaya a la página Content Security > CORS del bucket de destino y cree una regla de la siguiente manera:

Parámetro

Valor

Descripción

Origin

https://*.example.com

El comodín * autoriza a todos los subdominios HTTPS bajo example.com.

Allowed Methods

GET, PUT, POST

Admite lectura y carga en todos los entornos.

Allowed Headers

*

El comodín * evita cambios frecuentes en las reglas de CORS cuando los distintos entornos introducen diferentes encabezados personalizados.

Exposed Headers

ETag, x-oss-request-id

Admite tanto la validación de descargas como la retroalimentación de los resultados de carga.

Cached Timeout (Seconds)

3600

Una caché de 1 hora equilibra el rendimiento con la flexibilidad para depurar.

Vary: Origin

Seleccionado

Obligatorio. Indica a CDN que almacene en caché las respuestas por Origin, lo que previene conflictos entre entornos.

Paso 2: Comprobar la configuración

Ejecute pruebas de acceso o de carga tanto en https://dev.example.com como en https://app.example.com para confirmar que todas las operaciones se completan correctamente.

Hacer llamadas estilo API con autenticación

Una aplicación de frontend en https://api.example.com necesita acceder a recursos protegidos de OSS e incluir encabezados personalizados como Authorization.

Paso 1: Configurar una regla de CORS

Inicie sesión en la consola de OSS. En el bucket de destino, vaya a la página Content Security > CORS y cree una regla de la siguiente manera:

Parámetro

Valor

Descripción

Origin

https://api.example.com

Para solicitudes con información de autenticación, el origen debe ser un dominio preciso y de confianza.

Allowed Methods

GET, PUT, DELETE

Admite la lectura, actualización y eliminación de recursos privados.

Allowed Headers

authorization, content-type, x-oss-*

No utilice *. Enumere explícitamente los encabezados obligatorios (principio de mínimo privilegio).

Exposed Headers

ETag, x-oss-request-id

Proporciona un identificador de verificación para operaciones correctas y un ID para solucionar problemas.

Cached Timeout (Seconds)

600

Una caché más corta (10 minutos) garantiza que los cambios en la política de seguridad se apliquen rápidamente.

Vary: Origin

Seleccione

Garantiza que CDN almacene en caché las respuestas por separado para cada origen.

Paso 2: Comprobar la configuración

Inicie una solicitud con un encabezado Authorization desde la página https://api.example.com y confirme que puede acceder al recurso protegido de OSS.

Aplicar en producción

Prácticas recomendadas de seguridad

Siga el principio de mínimo privilegio.

  • Configure Origin (AllowedOrigin) con precisión: evite establecer * en Sources a menos que su bucket sea completamente público. Especifique dominios exactos, como https://www.example.com.

  • Restrinja Allowed Methods: exponga únicamente los métodos HTTP que su aplicación necesite. Para sitios de solo lectura, configure solo GET y HEAD.

  • Especifique Allowed Headers de forma explícita: para solicitudes autenticadas (con el encabezado Authorization), no utilice *. Enumere explícitamente todos los encabezados de solicitud obligatorios.

Prácticas recomendadas de rendimiento

  • Optimice la caché de solicitudes preflight: un valor razonable de MaxAgeSeconds, como 86400 segundos (24 horas), reduce significativamente las solicitudes preflight, lo que disminuye la latencia y el costo.

  • Evalúe el impacto de Vary: Origin: habilitar Vary: Origin resuelve problemas de envenenamiento de caché, pero aumenta la complejidad del almacenamiento en caché de CDN. Esto puede reducir la tasa de aciertos de la caché e incrementar el tráfico de retorno al origen (costo y latencia adicionales). Habilítelo solo después de evaluar sus patrones de tráfico.

Aceleración con CDN

Si su bucket se acelera mediante Alibaba Cloud CDN y se accede a él a través de un dominio de CDN, las solicitudes de origen cruzado llegarán primero a un punto de presencia (PoP) de CDN. Debe configurar las reglas de CORS en la consola de CDN, no en la consola de OSS. La configuración de CORS en OSS solo aplica a las solicitudes enviadas directamente al dominio de origen de OSS. Para obtener más detalles, consulte Configure cross-origin resource sharing.

Parámetros de las reglas de CORS

Puede configurar hasta 20 reglas de CORS para cada bucket. OSS evalúa las reglas secuencialmente de arriba hacia abajo y aplica la primera que coincida con la solicitud. Una vez que encuentra una coincidencia, no revisa las reglas siguientes.

Parámetro

Obligatorio

Descripción

Origin (AllowedOrigin)

Sí

Especifica los sitios web (dominios de origen) que tienen permiso para enviar solicitudes de origen cruzado a los recursos de OSS.

  • El formato es protocol://domain or IP address[:port]. Ejemplo: https://www.example.com o http://192.168.1.1:8080.

  • Se admite el comodín *, pero solo puede usarlo una vez en cada origen.

    • Ejemplos válidos: https://.example.com, http://localhost: o http://192.168.1.1:8080

    • Ejemplos no válidos: https://.example. o https://*

  • Se permiten varios orígenes, uno por línea.

Allowed Methods (AllowedMethod)

Sí

Especifica los métodos HTTP permitidos.

  • Valores válidos: GET, PUT, POST, DELETE, HEAD.

  • Se permiten varios métodos.

Allowed Headers (AllowedHeader)

No

Aplica a las solicitudes preflight y determina qué encabezados HTTP se pueden incluir en la solicitud real.

  • Se admite el carácter comodín *, que permite todos los encabezados.

  • Se permiten varios encabezados, uno por línea. Los encabezados NO distinguen entre mayúsculas y minúsculas.

Exposed Headers (ExposeHeader)

No

Especifica qué encabezados de respuesta de OSS son accesibles para JavaScript del lado del cliente.

  • No se admite el carácter comodín *.

  • Se permiten varios encabezados, uno por línea.

  • Caso de uso: para obtener el ETag o el x-oss-request-id de un archivo cargado en JavaScript, agregue ETag y x-oss-request-id a este parámetro.

Cached Timeout (MaxAgeSeconds)

No

Especifica el tiempo en segundos durante el cual un navegador puede almacenar en caché el resultado de una solicitud preflight OPTIONS.

  • Efecto: dentro de la duración de la caché, las solicitudes de origen cruzado idénticas posteriores para el mismo recurso no activarán una nueva solicitud preflight, lo que optimiza el rendimiento.

Vary: Origin

No

Determina si se agrega el encabezado de respuesta HTTP Vary: Origin. Este encabezado indica a las redes CDN y a otras cachés intermedias que almacenen distintas versiones del recurso según el encabezado Origin de la solicitud. Esto previene la contaminación de la caché cuando varios orígenes acceden al mismo recurso.

  • Caso de uso: habilite esta opción para evitar la contaminación de la caché cuando configura varios dominios o un comodín en el parámetro Sources.

Importante

Habilitar esta opción puede disminuir la tasa de aciertos de la caché de CDN.

Preguntas frecuentes

Error: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Este error suele indicar que el navegador almacenó en caché una respuesta antigua sin encabezados CORS, o que ninguna regla de CORS coincide con la solicitud entrante.

Borre la caché de su navegador y vuelva a probar. Si el error persiste, compruebe sus reglas de CORS:

  1. Inicie sesión en la consola de OSS.

  2. Haga clic en Buckets y luego haga clic en el nombre del bucket de destino.

  3. En el panel de navegación izquierdo, elija Content Security > CORS.

  4. En la página CORS, haga clic en Create Rule.

  5. En el panel Create CORS Rule, establezca Origin en *, seleccione todos los Allowed Methods, establezca Allowed Headers en *, establezca Exposed Headers en ETag y x-oss-request-id, establezca Cache Timeout (Seconds) en 0, seleccione Vary: Origin y haga clic en OK.

  6. Si el problema persiste, inicie sesión en cualquier servidor y ejecute el siguiente comando para consultar los encabezados de la solicitud de origen cruzado.

    curl -v -o output_file.txt -H 'Origin:[$URL2]' '[$URL1]'
    Nota
    • [URL1] es la URL del recurso de OSS solicitado.

    • [URL2] es la dirección de origen que configuró en la regla de CORS.

    El sistema muestra un resultado similar al siguiente.

    • Si la respuesta incluye un encabezado CORS coincidente, es probable que el problema se deba a la caché del navegador o de la red. Una solicitud anterior sin CORS pudo haberse almacenado localmente, y una solicitud de origen cruzado posterior recuperó esa respuesta en caché en lugar de obtener una nueva del servidor. Pruebe las siguientes soluciones:

      • Presione Ctrl+F5 en su navegador para borrar la caché y luego compruebe si el problema persiste.

      • Establezca Cached-Seconds en 0 en la regla de CORS. Esto obliga a que cada solicitud vuelva a obtener la autorización CORS del servidor.

        Nota

        Puede establecer el cache-control de un objeto en no-cache cuando lo cargue. Para los objetos que ya se cargaron, puede usar ossutil para cambiar esta configuración. Para obtener más información, consulte set-meta (Manage object metadata).

      • Utilice CDN para acelerar OSS y asegúrese de que todas las solicitudes servidas por CDN incluyan encabezados CORS.

    • Si la respuesta contiene dos encabezados CORS o un encabezado que no coincide con su configuración de OSS, es probable que el problema se deba al uso de CDN para acelerar OSS:

      1. Inicie sesión en la consola de CDN y deshabilite temporalmente la aceleración de CDN para el nombre de dominio con el fin de confirmar que el problema de origen cruzado se resolvió.

      2. Después de confirmarlo, haga clic en el nombre de dominio específico y luego vaya a Cache Configuration > Node HTTP Response Header.

      3. Establezca los encabezados de respuesta HTTP personalizados según sea necesario.

  7. Si el problema de CORS aún no se resuelve, consulte Common errors and solutions for OSS CORS para continuar con la solución de problemas.

Error: The 'Access-Control-Allow-Origin' header has a value '...' that is not equal to the supplied origin.

El servidor devolvió un encabezado Access-Control-Allow-Origin, pero su valor no coincide con el Origin de la solicitud. A menudo se trata de un problema de caché: un navegador o CDN almacena la respuesta para un dominio y la sirve a otro.

Habilite la opción Vary: Origin en su regla de CORS para evitar conflictos de caché entre distintos sitios web, o borre la caché de su navegador antes de volver a intentarlo.

Error: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.

Este error ocurre porque el frontend envió una solicitud con credenciales (Access-Control-Allow-Credentials es True), pero Access-Control-Allow-Origin está establecido en *. Los navegadores prohíben esta combinación para evitar que cualquier sitio acceda a datos confidenciales, como cookies o tokens de Authorization.

  • Si necesita credenciales, cambie Sources de * a un dominio específico (por ejemplo, https://example.com).

  • Si no necesita credenciales, establezca xhr.withCredentials en false en su código de frontend y asegúrese de que Access-Control-Allow-Credentials sea false en el servidor.

¿Cómo mejorar la carga lenta de origen cruzado desde OSS?

La velocidad de carga de origen cruzado depende de la latencia de red entre el cliente y el bucket de OSS. Una solicitud de origen cruzado incluye un encabezado Origin. Para accesos de larga distancia (por ejemplo, de China (Hong Kong) a China continental), utilice un endpoint de Transfer Acceleration para optimizar la ruta de red.

Nota

Transfer Acceleration optimiza las rutas de red para mejorar las velocidades de transferencia de datos a nivel global.