therefore the resource requested present origin not node iss control check allowed allow javascript ajax node.js google-chrome

javascript - resource - origin http localhost is therefore not allowed access



Origen http:// localhost: 3000 no está permitido por Access-Control-Allow-Origin (7)

Acepto la respuesta de @Rocket Hazmat porque me lleva a la solución. De hecho, estaba en el servidor de GAE que necesitaba para configurar el encabezado. Tenía que configurar estos

"Access-Control-Allow-Origin" -> "*" "Access-Control-Allow-Headers" -> "Origin, X-Requested-With, Content-Type, Accept"

establecer solo "Access-Control-Allow-Origin" dio error

Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers.

Además, si se debe enviar un token de autenticación, agrégalo también

"Access-Control-Allow-Credentials" -> "true"

Además, en el cliente, establezca withCredentials

esto provoca 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, es necesario tratar la autenticación externa.

XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

Leí sobre solicitudes ajax de dominio cruzado y entiendo el problema de seguridad subyacente. En mi caso, 2 servidores se ejecutan localmente y les gusta habilitar solicitudes de dominios cruzados durante las pruebas.

localhost:8080 - Google Appengine dev server localhost:3000 - Node.js server

Estoy emitiendo una solicitud ajax a localhost:8080 - GAE server mientras mi página se carga desde el servidor de nodo. ¿Qué es más fácil y más seguro? (No quiero iniciar Chrome con la opción de disable-web-security ). Si tengo que cambiar ''Content-Type'' , ¿debería hacerlo en el servidor de nodos? ¿Cómo?


Agregue esto a su Servidor NodeJS a continuación de las importaciones:

app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });


Dado que se ejecutan en diferentes puertos, tienen un origin JavaScript diferente. No importa que estén en la misma máquina / nombre de host.

Debe activar CORS en el servidor (localhost: 8080). Visite este sitio: http://enable-cors.org/

Todo lo que necesita hacer es agregar un encabezado HTTP al servidor:

Access-Control-Allow-Origin: http://localhost:3000

O, para simplificar:

Access-Control-Allow-Origin: *


Estaba enfrentando un problema al invocar recurso de origen cruzado usando ajax de chrome.

He utilizado el nodo js y el servidor http local para implementar mi aplicación node js.

Recibí una respuesta de error cuando accedí al recurso de origen cruzado

Encontré una solución sobre eso,

1) He agregado el código siguiente a mi archivo app.js

res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With");

2) En mi página html llamada recurso de origen cruzado usando $.getJSON();

$.getJSON("http://localhost:3000/users", function (data) { alert("*******Success*********"); var response=JSON.stringify(data); alert("success="+response); document.getElementById("employeeDetails").value=response; });


Finalmente obtuve la respuesta para apache Tomcat8

Tienes que editar el archivo web.xml de tomcat.

Probablemente estará dentro de la carpeta webapps,

sudo gedit /opt/tomcat/webapps/your_directory/WEB-INF/web.xml

encuéntralo y edítalo

<web-app> <filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> </init-param> <init-param> <param-name>cors.exposed.headers</param-name> <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> </init-param> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.preflight.maxage</param-name> <param-value>10</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>

Esto permitirá a Access-Control-Allow-Origin todos los hosts. Si necesita cambiarlo de todos los hosts a solo su host, puede editar el

<param-name>cors.allowed.origins</param-name> <param-value>http://localhost:3000</param-value>

encima del código de * a su http: // your_public_IP o http://www.example.com

puede consultar aquí la documentación del filtro Tomcat

Gracias


Si necesita un trabajo rápido en Chrome para solicitudes ajax, este complemento de Chrome le permite automáticamente acceder a cualquier sitio desde cualquier fuente agregando el encabezado de respuesta adecuado

Extensión de Chrome Allow-Control-Allow-Origin: *


Tienes que habilitar CORS para resolver esto

si su aplicación se crea con simple node.js

configurarlo en los encabezados de respuesta como

var http = require(''http''); http.createServer(function (request, response) { response.writeHead(200, { ''Content-Type'': ''text/plain'', ''Access-Control-Allow-Origin'' : ''*'', ''Access-Control-Allow-Methods'': ''GET,PUT,POST,DELETE'' }); response.end(''Hello World/n''); }).listen(3000);

si su aplicación se crea con marco expreso

use un middleware CORS como

var allowCrossDomain = function(req, res, next) { res.header(''Access-Control-Allow-Origin'', "*"); res.header(''Access-Control-Allow-Methods'', ''GET,PUT,POST,DELETE''); res.header(''Access-Control-Allow-Headers'', ''Content-Type''); next(); }

y aplicar vía

app.configure(function() { app.use(allowCrossDomain); //some other code });

Aquí hay dos enlaces de referencia

  1. how-to-allow-cors-in-express-nodejs
  2. diving-into-node-js-very-first-app #ver la sección de Ajax