XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Leí sobre las solicitudes ajax de dominio cruzado y entiendo el problema de seguridad subyacente. En mi caso, 2 servidores se ejecutan localmente y desean habilitar las solicitudes de dominio cruzado durante las pruebas.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Estoy emitiendo una solicitud ajax localhost:8080 - GAE server
mientras mi página se carga desde el servidor de nodo. ¿Qué es lo más fácil y seguro? (No quiero iniciar Chrome con la disable-web-security
opción). Si tengo que cambiar 'Content-Type'
, ¿debería hacerlo en el servidor de nodo? ¿Cómo?
Respuestas:
Como se ejecutan en diferentes puertos, son diferentes JavaScript
origin
. No importa que estén en la misma máquina / nombre de host.Debe habilitar CORS en el servidor (localhost: 8080). Echa un vistazo a este sitio: http://enable-cors.org/
Todo lo que necesita hacer es agregar un encabezado HTTP al servidor:
O, por simplicidad:
Pensé que no use "*" si su servidor está tratando de configurar cookies y usted usa
withCredentials = true
Puedes leer más sobre
withCredentials
aquífuente
Access-Control-Allow-Origin
encabezado dado debe ser un encabezado agregado a las respuestas HTTP que envía el servidor. Este encabezado debe ser parte de la respuesta del servidor, no necesita ser parte de la solicitud del cliente . Específicamente, lo que sucede es antes de que el cliente haga la solicitud real que desea, el navegador envía unaOPTIONS
solicitud antes y, si la respuesta del servidor a esaOPTIONS
solicitud no contiene el encabezado, el navegador no enviará su solicitud deseada.Si necesita una solución rápida en Chrome para solicitudes ajax, este complemento de Chrome le permite acceder automáticamente a cualquier sitio desde cualquier fuente agregando el encabezado de respuesta adecuado
Extensión de Chrome Permitir-Control-Permitir-Origen: *
fuente
Tienes que habilitar CORS para resolver esto
si su aplicación se crea con node.js simple
configurarlo en sus encabezados de respuesta como
si su aplicación se crea con express framework
usar un middleware CORS como
y aplicar a través de
Aquí hay dos enlaces de referencia
fuente
config.allowedDomains
? en mi caso, ¿qué uri debo poner allí?*
o elspecific domain
que desea dar acceso.app.configure()
recibe no es un error de función?Acepto la respuesta de @Rocket Hazmat, ya que me llevó a la solución. De hecho, fue en el servidor GAE que necesitaba configurar el encabezado. Tuve que configurar estos
la configuración solo
"Access-Control-Allow-Origin"
dio errorAdemás, si necesita enviar un token de autenticación, agréguelo también
Además, en el cliente, establezca
withCredentials
esto hace que se envíen 2 solicitudes al servidor, una con
OPTIONS
. La cookie de autenticación no se envía con ella, por lo tanto, debe tratar la autenticación externa.fuente
En router.js solo agregue el código antes de llamar a los métodos get / post. Funciona para mí sin errores.
fuente
Estaba enfrentando un problema al llamar a un recurso de origen cruzado usando ajax desde Chrome.
He usado el nodo js y el servidor http local para implementar mi aplicación de nodo js.
Recibía una respuesta de error cuando accedo al recurso de origen cruzado
Encontré una solución en eso,
1) He agregado el siguiente código a mi archivo app.js
2) En mi página html llamada recurso de origen cruzado usando
$.getJSON();
fuente
Si está utilizando express, puede usar el middleware cors de la siguiente manera:
fuente
Agregue esto a su servidor NodeJS debajo de las importaciones:
fuente
Si obtuvo 403 después de eso, reduzca los filtros en la configuración de tomcat de WEB.XML a lo siguiente:
fuente
Finalmente obtuve la respuesta para apache Tomcat8
Tiene que editar el archivo tomcat web.xml.
probablemente estará dentro de la carpeta webapps,
encuéntralo y edítalo
Esto permitirá Access-Control-Allow-Origin a todos los hosts. Si necesita cambiarlo de todos los hosts a solo su host, puede editar el
código anterior de * a su http: // your_public_IP o http://www.example.com
puede consultar aquí la documentación del filtro Tomcat
Gracias
fuente
Hola, esta es la forma de resolver el problema CORS en el nodo. Simplemente agregue estas líneas en el lado "api" del servidor en Node.js (o en el archivo del servidor), asegúrese de instalar "cors"
fuente
use dataType: 'jsonp', funciona para mí.
fuente
Para PHP, use esto para establecer encabezados.
fuente
agregue esto a sus rutas que está llamando desde el front-end. Por ejemplo, si solicita http: // localhost: 3000 / users / register , debe agregar este fragmento de código en su archivo .js de fondo que establece esta ruta.
fuente
En caso de que alguien busque la solución, si está utilizando express, esta es la solución rápida.
1) instalar cors usando npm
npm install cors --save
2) importarlo [requerir]
const cors = require('cors')
3) utilízalo como middleware
app.use(cors())
para detalles de insatll y uso de cors . Eso es todo, con suerte funciona.
fuente
Si estás en Google Chrome, intenta instalar este complemento:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
fuente