Происхождения http://localhost:3000 не допускается по контроля доступа-разрешить-происхождение
XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Я читал о междоменных ajax-запросах и понимаю основную проблему безопасности. В моем случае 2 сервера работают локально и любят включать междоменные запросы во время тестирования.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Я выдаю запрос ajax на localhost:8080 - GAE server пока моя страница загружается с сервера узел. Что является самым простым и безопасным ( не хочу, чтобы начать chrome с ). Если мне придется изменить 'Content-Type', Я должен сделать это в узел? Как?
10 ответов:
Так как они работают на разных портах, они отличаются JavaScript
origin. Неважно, что они находятся на одном компьютере/узла.вам нужно включить CORS на сервере (localhost:8080). Проверьте этот сайт:http://enable-cors.org/
все, что вам нужно сделать, это добавить заголовок HTTP на сервер:
Access-Control-Allow-Origin: http://localhost:3000или, для простоты:
Access-Control-Allow-Origin: *
вы должны включить CORS, чтобы решить эту
если ваше приложение создано с простым узлом.js
установите его в заголовках ответов, таких как
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);если ваше приложение создано с помощью express framework
используйте промежуточное программное обеспечение CORS, например
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(); }и применить через
app.configure(function() { app.use(allowCrossDomain); //some other code });вот две ссылки ссылки
- how-to-allow-cors-in-express-nodejs
- дайвинг-в-узел-Яш-самый-первый-приложение #смотрите раздел Ajax
Если вам нужна быстрая работа в Chrome для ajax запросов, этот плагин chrome автоматически позволяет получить доступ к любому сайту из любого источника, добавив правильный заголовок ответа
Я принимаю ответ @ Rocket hazmat, поскольку он приводит меня к решению. Это было действительно на сервере GAE мне нужно было установить заголовок. Я должен был установить эти
"Access-Control-Allow-Origin" -> "*" "Access-Control-Allow-Headers" -> "Origin, X-Requested-With, Content-Type, Accept"настройки только
"Access-Control-Allow-Origin"дал ошибкуRequest header field X-Requested-With is not allowed by Access-Control-Allow-Headers.кроме того, если маркер аутентификации должен быть отправлен, добавьте это тоже
"Access-Control-Allow-Credentials" -> "true"также, на клиенте, установите
withCredentialsэто вызывает 2 запроса к отправке на сервер, один с
OPTIONS. Auth cookie не отправляется с ним, поэтому нужно лечить снаружи автор.
я столкнулся с проблемой при вызове ресурса cross origin с помощью ajax из chrome.
я использовал узел js и локальный сервер http для развертывания моего узла JS приложения.
я получал ответ на ошибку, когда я получаю доступ к перекрестному ресурсу происхождения
Я нашел одно решение о том ,
1) я добавил ниже код в моем приложении.js file
res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With");2) в моей html-странице называется cross origin resource с помощью
$.getJSON();$.getJSON("http://localhost:3000/users", function (data) { alert("*******Success*********"); var response=JSON.stringify(data); alert("success="+response); document.getElementById("employeeDetails").value=response; });
добавьте это на свой сервер NodeJS ниже импорта:
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(); });
я наконец - то получил ответ на apache Tomcat8
вы должны отредактировать tomcat web.XML-файл.
вероятно, это будет внутри папки webapps,
sudo gedit /opt/tomcat/webapps/your_directory/WEB-INF/web.xmlнайти и отредактировать его
<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>Это позволит Access-Control-Allow-Origin все хосты. Если вам нужно изменить его со всех хостов на только ваш хост, вы можете отредактировать
<param-name>cors.allowed.origins</param-name> <param-value>http://localhost:3000</param-value>выше код от * до вашего http://your_public_IP или http://www.example.com
вы можете обратиться здесь Tomcat filter documentation
спасибо
использовать тип данных: 'jsonp', работает для меня.
async function get_ajax_data(){ var _reprojected_lat_lng = await $.ajax({ type: 'GET', dataType: 'jsonp', data: {}, url: _reprojection_url, error: function (jqXHR, textStatus, errorThrown) { console.log(jqXHR) }, success: function (data) { console.log(data); // note: data is already json type, you just specify dataType: jsonp return data; } }); } // function
Если вы получили 403 после этого, пожалуйста, уменьшите фильтры в интернете.XML Tomcat config к следующему:
<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> </filter>
In router.js just add code before calling get/post methods. It works for me without errors. //Importing modules @Brahmmeswar const express = require('express'); const router = express.Router(); const Contact = require('../models/contacts'); router.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(); });
Comments