apache - multiple - cors javascript
manejar mĂșltiples dominios con el encabezado Access-Control-Allow-Origin en Apache (5)
Quiero configurar Apache para el encabezado de acceso entre dominios. He intentado varias combinaciones como se sugiere en la cantidad de hilos en el foro. Pero no funciona para mí.
Las formas, lo he intentado:
1) Especifique el dominio en una línea diferente como se muestra a continuación con el Header set
:
Header set Access-Control-Allow-Origin "example1.com"
Header set Access-Control-Allow-Origin "example2.com"
Header set Access-Control-Allow-Origin: "example3.com"
Con esta configuración, elige solo la última e ignora el resto.
2) Especifique el dominio en una línea diferente como se muestra a continuación con el Header add
:
Header add Access-Control-Allow-Origin "example1.com"
Header add Access-Control-Allow-Origin "example2.com"
Header add Access-Control-Allow-Origin: "example3.com"
Con esto, muestra los tres dominios en el encabezado, pero las fuentes no se recogen en Firefox.
3.) SetEnvIf
usar SetEnvIf
, pero nuevamente no está funcionando:
SetEnvIf Origin "http(s)?://(www/.)?(mydomain.com|mydomain2.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Finalmente trabajando con "*", pero no quiero usar esto.
Por favor ayuda con esto
A menos que malinterprete el manual , debería ser:
Header always append Access-Control-Allow-Origin: "example1.com"
Header always append Access-Control-Allow-Origin: "example2.com"
Header always append Access-Control-Allow-Origin: "example3.com"
El manual indica que las acciones set
y add
comportan de la siguiente manera:
set: "Se establece el encabezado de respuesta, reemplazando cualquier encabezado anterior con este nombre"
add: "... Esto puede generar dos (o más) encabezados con el mismo nombre, lo que puede generar consecuencias imprevistas ..."
Esto funciona para mí en ASP clásico:
If Request.ServerVariables("HTTP_ORIGIN") = "http://domain1.com" Then
Response.AddHeader "Access-Control-Allow-Origin","http://domain1.com"
ElseIf Request.ServerVariables("HTTP_ORIGIN") = "http://domain2.com" Then
Response.AddHeader "Access-Control-Allow-Origin","http://domain2.com"
''and so on
End If
Para 3 dominios, en su .htaccess:
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www/.)?(domain1.org|domain2.com|domain3.net)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
Lo intenté y me funciona. Avísame si no es para ti.
Para restringir el acceso a ciertos URIs, descargue estos documentos:
Control de acceso del lado del servidor # Apache_examples
Un truco útil es usar una reescritura de Apache, una variable de entorno y encabezados para aplicar Access-Control-Allow- * a ciertos URI. Esto es útil, por ejemplo, para restringir las solicitudes de origen cruzado a solicitudes GET /api(.*).json sin credenciales:
RewriteRule ^/api(.*)/.json$ /api$1.json [CORS=True]
Header set Access-Control-Allow-Origin "*" env=CORS
Header set Access-Control-Allow-Methods "GET" env=CORS
Header set Access-Control-Allow-Credentials "false" env=CORS
Además, en general, de acuerdo con W3 Wiki - CORS Enabled # For_Apache Para exponer el encabezado, puede agregar la siguiente línea dentro de las secciones Directory, Location y Files, o dentro de un archivo .htaccess.
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
Y, puede usar add en lugar de set, pero tenga en cuenta que add puede agregar el encabezado varias veces, por lo que generalmente es más seguro usar set.
Prueba este, funciona para mí. Aplicar en .htaccess:
SetEnvIf Origin "^http(s)?://(.+/.)?(domain/.org|domain2/.com)$" origin_is=$0
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is