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
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
- how-to-allow-cors-in-express-nodejs
- diving-into-node-js-very-first-app #ver la sección de Ajax