Estoy haciendo un Ajax.request
servidor PHP remoto en una aplicación Sencha Touch 2 (envuelta en PhoneGap ).
La respuesta del servidor es la siguiente:
XMLHttpRequest no puede cargar http://nqatalog.negroesquisso.pt/login.php . El origen
http://localhost:8888
no está permitido por Access-Control-Allow-Origin.
¿Como puedo solucionar este problema?
javascript
ajax
cors
xmlhttprequest
cross-domain
Ricardo
fuente
fuente
dataType: 'jsonp',
hace el trucoAccess-Control-Allow-Origin
e informarlo como un error.Respuestas:
Escribí un artículo sobre este tema hace un tiempo, Cross Domain AJAX .
La forma más fácil de manejar esto si tiene control del servidor que responde es agregar un encabezado de respuesta para:
Esto permitirá el dominio cruzado de Ajax . En PHP, querrás modificar la respuesta así:
Simplemente puede poner la
Header set Access-Control-Allow-Origin *
configuración en la configuración de Apache o en el archivo htaccess.Cabe señalar que esto deshabilita efectivamente la protección CORS, que muy probablemente expone a sus usuarios a los ataques . Si no sabe que necesita usar un comodín específicamente, no debe usarlo y, en su lugar, debe incluir en la lista blanca su dominio específico:
fuente
Si usted no tiene el control del servidor, sólo tiene que añadir este argumento a su lanzador Chrome:
--disable-web-security
.Tenga en cuenta que no usaría esto para la "navegación web" normal. Para referencia, vea esta publicación: Deshabilite la misma política de origen en Chrome .
Si usa Phonegap para compilar la aplicación y cargarla en el dispositivo, esto no será un problema.
fuente
Si está usando Apache simplemente agregue:
en su configuración Esto hará que todas las respuestas de su servidor web sean accesibles desde cualquier otro sitio en Internet. Si tiene la intención de permitir que un servidor específico utilice los servicios en su host, puede reemplazarlos
*
con la URL del servidor de origen:fuente
Si tiene una aplicación ASP.NET / ASP.NET MVC , puede incluir este encabezado a través del archivo Web.config:
fuente
Esta fue la primera pregunta / respuesta que surgió cuando traté de resolver el mismo problema usando ASP.NET MVC como fuente de mis datos. Me doy cuenta de que esto no resuelve la pregunta de PHP , pero está lo suficientemente relacionado como para ser valioso.
Estoy usando ASP.NET MVC. La publicación de blog de Greg Brant funcionó para mí. En última instancia, crea un atributo
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
que puede agregar a las acciones del controlador.Por ejemplo:
Y luego usarlo con:
fuente
Como Matt Mombrea es correcto para el lado del servidor, puede encontrarse con otro problema que es el rechazo de la lista blanca.
Tienes que configurar tu phonegap.plist. (Estoy usando una versión anterior de phonegap)
Para cordova, puede haber algunos cambios en el nombre y el directorio. Pero los pasos deberían ser casi los mismos.
Primero seleccione Archivos de soporte> PhoneGap.plist
luego en "ExternalHosts"
Agregue una entrada, con un valor de quizás " http://nqatalog.negroesquisso.pt " Estoy usando * solo para propósitos de depuración.
fuente
Esto puede ser útil para cualquier persona que necesite una excepción para las versiones 'www' y 'no www' de un referente:
fuente
Te daré una solución simple para este. En mi caso no tengo acceso a un servidor. En ese caso, puede cambiar la política de seguridad en su navegador Google Chrome para permitir Access-Control-Allow-Origin. Esto es muy simple:
Pasta simple en
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
.La ubicación puede diferir. Ahora abra Chrome haciendo clic en ese acceso directo.
fuente
Me he encontrado con esto varias veces cuando trabajo con varias API. A menudo, una solución rápida es agregar "& callback =?" hasta el final de una cuerda. A veces, el signo "y" tiene que ser un código de caracteres y, a veces, un "?": "? Callback =?" (vea el uso de Forecast.io API con jQuery )
fuente
Si estás escribiendo una extensión de Chrome y obtiene este error, a continuación, asegúrese de haber agregado la URL base del API a su
manifest.json
's bloque de permisos , ejemplo:fuente
Esto se debe a la política del mismo origen . Ver más en Mozilla Developer Network o Wikipedia .
Básicamente, en su ejemplo, necesita cargar la
http://nqatalog.negroesquisso.pt/login.php
página solo desdenqatalog.negroesquisso.pt
, nolocalhost
.fuente
si está bajo Apache, simplemente agregue un archivo .htaccess a su directorio con este contenido:
fuente
En Ruby on Rails , puedes hacer en un controlador:
fuente
Puede hacer que funcione sin modificar el servidor haciendo que el filtro incluya el encabezado
Access-Control-Allow-Origin: *
en las respuestas de las OPCIONES HTTP.En Chrome, usa esta extensión . Si estás en Mozilla revisa esta respuesta .
fuente
Si obtiene esto en Angular.js, asegúrese de escapar de su número de puerto de esta manera:
Vea aquí para más información al respecto.
fuente
También tenemos el mismo problema con la aplicación phonegap probada en Chrome. Una máquina de Windows que utilizamos debajo del archivo por lotes todos los días antes de abrir Chrome. Recuerde que antes de ejecutar esto, debe limpiar todas las instancias de Chrome desde el administrador de tareas o puede seleccionar Chrome para que no se ejecute en segundo plano.
LOTE: (use cmd)
fuente
En Ruby Sinatra
para todos o
fuente
Cuando reciba la solicitud, puede
que cuando tienes que responder ve con algo así:
fuente