2012-03-09 11 views
5

Estoy tratando de permitir el acceso a cada subdominio en mi sitio para permitir las llamadas AJAX de subdominio cruzado. ¿Hay una manera de especificar todos los subdominios de un sitio como *.example.com o, alternativamente, ¿por qué el no siguiendo trabajar cuando tengo más de un dominio enumerado:Especifique múltiples subdominios con control de acceso Origen

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

He leído a través de la siguiente pregunta, que parece ser similar , si no es lo mismo que este, aparte del hecho de que quiero acceso a subdominios y este se refiere a dominios generales.

Access-Control-Allow-Origin Multiple Origin Domains?

Si la pregunta anterior es la solución a este problema, entonces, ¿cómo soy yo capaz de recuperar el origen de la cabecera. Parece que $ _SERVER ['HTTP_ORIGIN'] es muy poco fiable y ni siquiera cruza el navegador. Necesito poder ver el origen en cualquier navegador que pueda mostrar un error cuando intento enviar una llamada AJAX usando javascript.

+0

Como dijo, la primera parte de su pregunta se responde en el enlace. Con respecto a su segunda pregunta: si el navegador intenta una llamada Ajax que está prohibida por las Políticas de Cross Domain, la solicitud fallará y no llegará al servidor en absoluto. El error tendrá que ser manejado en el navegador. –

+0

Soy consciente de que recibiré un error, pero este error se proporcionará después de que la llamada haya intentado acceder al archivo externo. Si el archivo lo rechaza, se lanzará el error. Si configuro el encabezado para permitir el acceso a todos, entonces funcionará, pero esto es demasiado abierto para mí, por lo que me gustaría establecerlo relevante para el origen de la solicitud. Por lo tanto, me gustaría saber cómo obtener el origen de la solicitud utilizando PHP. –

+0

¿Puede profundizar en lo que quiere decir con "$ _SERVER ['HTTP_ORIGIN'] es muy poco fiable y ni siquiera cruza el navegador"? $ _SERVER ['HTTP_ORIGIN'] es un valor del lado del servidor que no se ejecuta en el navegador. – monsur

Respuesta

18

la solución a este problema es utilizar la variable $ _SERVER [ 'HTTP_ORIGIN'] para determinar si la petición ha venido de un dominio permitido. Luego ha establecido esto:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

He aquí un buen artículo sobre su Pregunta: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Si eso no es lo suficientemente bueno o no funciona bien se necesita un proxy de la siguiente manera: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

A continuación, se puede llamar al proxy con parámetros como: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

"Aquí hay un buen artículo sobre su pregunta" - Ese artículo no aborda la pregunta en absoluto. – Quentin

+0

"Si eso no es lo suficientemente bueno o no funciona, necesita un Proxy como este" - No. No se necesita un proxy. Ver la respuesta aceptada. – Quentin

Cuestiones relacionadas