Subdominios, puertos y protocolos comodín Access-Control-Allow-Origin

Resuelto Elie asked hace 11 años • 15 respuestas

Estoy intentando habilitar CORS para todos los subdominios, puertos y protocolos.

Por ejemplo, quiero poder ejecutar una solicitud XHR http://sub.mywebsite.example:8080/desde https://www.mywebsite.example/*

Por lo general, me gustaría habilitar la solicitud de coincidencia de orígenes (y limitada a):

//*.mywebsite.example:*/*

Elie avatar Dec 22 '12 20:12 Elie
Aceptado

La especificación CORS es todo o nada. Solo admite *, nullo el protocolo exacto + dominio + puerto: http://www.w3.org/TR/cors/#access-control-allow-origin-response-header

Su servidor deberá validar el encabezado de origen utilizando la expresión regular y luego podrá repetir el valor de origen en el Access-Control-Allow-Originencabezado de respuesta.

monsur avatar Dec 22 '2012 20:12 monsur

Según la respuesta de DaveRandom , también estuve jugando y encontré una solución Apache un poco más simple que produce el mismo resultado ( Access-Control-Allow-Originestá configurada dinámicamente en el protocolo específico actual + dominio + puerto) sin usar ninguna regla de reescritura:

SetEnvIf Origin ^(https?://.+\.mywebsite\.example(?::\d{1,5})?)$   CORS_ALLOW_ORIGIN=$1
Header append Access-Control-Allow-Origin  %{CORS_ALLOW_ORIGIN}e   env=CORS_ALLOW_ORIGIN
Header merge  Vary "Origin"

Y eso es.

Aquellos que quieran habilitar CORS en el dominio principal (por ejemplo mywebsite.example), además de todos sus subdominios, pueden simplemente reemplazar la expresión regular en la primera línea con esta:

^(https?://(?:.+\.)?mywebsite\.example(?::\d{1,5})?)$.

Nota: Para cumplir con las especificaciones y corregir el comportamiento del almacenamiento en caché, SIEMPRE agregue el Vary: Originencabezado de respuesta para los recursos habilitados para CORS, incluso para solicitudes que no sean CORS y aquellas de un origen no permitido (consulte el ejemplo de por qué ).

Noyo avatar Jan 16 '2015 18:01 Noyo