Estoy usando .htaccess para reescribir las URL y utilicé la etiqueta base html para que funcione.
Ahora, cuando trato de hacer una solicitud ajax, aparece el siguiente error:
XMLHttpRequest no se puede cargar
http://www.example.com/login.php
. No hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Origen 'http://example.com
', por lo tanto, no se permite el acceso.
javascript
jquery
ajax
cors
xmlhttprequest
Th3lmuu90
fuente
fuente
http://wordicious.com
es un dominio diferente quehttp://www.wordicious.com/
, por lo tanto, el error. Por cierto, si está funcionando ahora y regresó por sí solo, probablemente debería eliminar la pregunta.Respuestas:
Uso
addHeader
En lugar de usar elsetHeader
método,*
en la línea de arriba lo permitiráaccess to all domains
.Por permitir
access to specific domain only
:Mira esto
blog post
.fuente
Por qué se genera el error:
El código JavaScript está limitado por la política del mismo origen , lo que significa que, desde una página en
www.example.com
, solo puede realizar solicitudes (AJAX) a servicios ubicados exactamente en el mismo dominio, en ese caso, exactamentewww.example.com
( noexample.com
- sin elwww
- owhatever.example.com
).En su caso, su código Ajax está tratando de llegar a un servicio
http://wordicious.com
desde una página ubicada enhttp://www.wordicious.com
.Aunque muy similares, son no el mismo dominio. Y cuando no están en el mismo dominio, la solicitud solo tendrá éxito si la respuesta del objetivo contiene un
Access-Control-Allow-Origin
encabezado.Como su página / servicio en
http://wordicious.com
nunca se configuró para presentar dicho encabezado, se muestra ese mensaje de error.Solución:
Como se dijo, los dominios de origen (donde está la página con JavaScript) y el destino (donde está tratando de alcanzar JavaScript) deben ser exactamente los mismos.
Tu caso parece un error tipográfico. Parece
http://wordicious.com
y enhttp://www.wordicious.com
realidad son el mismo servidor / dominio. Así que para fijar, escriba el destino y el origen por igual: hacerte Ajax páginas de solicitud de código / servicios quehttp://www.wordicious.com
nohttp://wordicious.com
. (Quizás coloque la URL de destino relativamente, como'/login.php'
, sin el dominio).En una nota más general:
Si el problema no es un error tipográfico como el de esta pregunta, la solución sería agregarlo
Access-Control-Allow-Origin
al dominio de destino . Agregarlo depende, por supuesto, del servidor / idioma detrás de esa dirección. A veces, una variable de configuración en la herramienta hará el truco. Otras veces tendrá que agregar los encabezados a través del código usted mismo.fuente
Para el servidor .NET puede configurar esto en web.config como se muestra a continuación
Por ejemplo, si el dominio del servidor es http://live.makemypublication.com y el cliente es http://www.makemypublication.com , configúrelo en el servidor web.config como se muestra a continuación.
fuente
Si recibe este mensaje de error del navegador:
cuando intente hacer una solicitud Ajax POST / GET a un servidor remoto que está fuera de su control, olvide esta solución simple:
Lo que realmente necesita hacer, especialmente si solo usa JavaScript para hacer la solicitud de Ajax, es un proxy interno que tome su consulta y la envíe al servidor remoto.
Primero en su JavaScript, haga una llamada Ajax a su propio servidor, algo como:
Luego, cree un archivo PHP simple llamado proxy.php para envolver sus datos POST y agregarlos al servidor de URL remoto como parámetros. Te doy un ejemplo de cómo evito este problema con la API de búsqueda de hoteles de Expedia:
Haciendo:
Simplemente está haciendo la misma consulta pero en el lado del servidor y después de eso, debería funcionar bien.
fuente
Debe agregar esto al comienzo de su página php "login.php"
fuente
debe colocar las claves / valores de encabezado en la respuesta del método de opciones. por ejemplo, si tiene un recurso en http://midominio.com/miresource , entonces, en el código de su servidor, escriba
fuente
Básicamente, modifique la respuesta del encabezado API agregando los siguientes parámetros adicionales.
Access-Control-Allow-Credentials: verdadero
Acceso-Control-Permitir-Origen: *
Pero esta no es una buena solución cuando se trata de la seguridad.
fuente
La solución consiste en utilizar un proxy inverso que se ejecute en su host 'fuente' y que se reenvíe a su servidor de destino, como Fiddler:
Enlace aquí: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy
O un proxy inverso de Apache ...
fuente
Agregue esto a su archivo PHP o controlador principal
fuente
header("Access-Control-Allow-Credentials: true");
Resuelto con la siguiente entrada en httpd.conf
fuente
Por favor, encuentre la función utilizada en XMLHTTPREQUEST en Javascript para configurar los encabezados de solicitud.
Referencia: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader
fuente