what setheader res origin multiple domains domain control allow http xmlhttprequest cross-domain cors

http - multiple - res setheader('' access control allow origin



Mejor método: Access-Control-Allow-Origin Multiple Origin Domains (2)

La documentación sobre esto parece implicar que permite múltiples orígenes con una lista separada por espacios, pero eso no es lo que realmente significa. Esto es lo que podría recopilar como la respuesta más definitiva a su pregunta: el encabezado Access-Control-Allow-Origin debería tener el mismo valor que el encabezado Origin siempre que quiera permitirlo.

La razón por la cual no es una lista blanca que envía al cliente es porque técnicamente el cliente puede enviar una lista de orígenes separados por espacios para que el servidor pueda validar la solicitud. El propósito de la lista de origen entonces es porque la solicitud pudo provenir de múltiples orígenes (es decir, la solicitud se redirigió a través de dominios). Un conjunto de pruebas hace que sea fácil observar este comportamiento con diferentes posibilidades de redireccionamiento, aunque Firefox nunca genera una lista separada por espacios.

Esto se ilustra más abajo en el primer documento W3C vinculado que proporcionó:

El encabezado Access-Control-Allow-Origin indica si un recurso se puede compartir en función de devolver el valor del encabezado de solicitud de Origen, "*", o "nulo" en la respuesta. ABNF:

Access-Control-Allow-Origin = "Access-Control-Allow-Origin" ":" origin-list-or-null | "*"

En la práctica, la producción origin-list-or-null está más restringida. En lugar de permitir una lista de orígenes separados por espacios, es un origen único o la cadena "nula".

Y de nuevo en origin-list-or-null . Además, muestra que si desea permitir que la cadena "nula" sea un origen, de todos modos no podría incrustarse en una lista de origen.

Así que quédese con el encabezado generado dinámicamente según el encabezado de Origin del cliente y si coincide con su lista blanca.

Esta pregunta se ha formulado aquí anteriormente y se le ha dado una serie de buenas respuestas, principalmente: ¿Dominios de origen múltiple de acceso, control, permiso y origen?

Sin embargo, parece que hay una brecha en la explicación en términos del método aprobado que se debe emprender. Al leer la documentación de W3, tenemos lo que me parece un conflicto de orientación.

En primer lugar, vemos la respuesta dada como la forma correcta de hacerlo en muchas de las respuestas anteriores que dictan que el servidor host debe repetir dinámicamente el ''Origen'' dado si aparece en una ''lista blanca'' predefinida. http://www.w3.org/TR/cors/#resource-implementation

Sin embargo, muchas de las respuestas y los métodos utilizados también aluden a una lista delimitada por espacios que también se puede usar como un método para pasar varios ''Orígenes'' para permitir. Si echamos un vistazo a otra pieza de la documentación de W3 en http://www.w3.org/wiki/CORS_Enabled , vemos un ejemplo de esto en la primera sección de la página como:

Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com

Sin embargo, de estos dos métodos me complacería igualmente incorporar, sin embargo, puede haber una gran lista de direcciones URL que deberán incluirse en la lista y, por lo tanto, quería asegurarme de que estoy haciendo esto correctamente la primera vez. Si alguien tiene alguna idea de los dos métodos mencionados anteriormente, estaría muy agradecido de escuchar la decisión en sus elecciones y si hay una guía definitiva del método recomendado, tal vez la haya omitido.


Si necesita permitir un origen que contenga una palabra específica "ejemplo", puede usar la siguiente configuración en su apache vhost.

SetEnvIf Origin "^((?:https?:////)?(?:[^@/n]+@)?(?:www.)?.example?.*)" REFERER=$0 Header always set Access-Control-Allow-Origin %{REFERER}e env=REFERER

Esto satisfará algunas de las siguientes condiciones de Origen:

http://abc.bcd.example.com https://www.example.in http://abcdexample.com many more

Puede ajustar la expresión regular anterior según sus necesidades.