Спасибо за так много быстрого ответа.
Я использовал NodeJS (v4.3.2) и ExpressJs (v4.x) для создания веб-сайта.
Я использовал много AJAX, и все URL-адреса AJAX указывают на один статический IP-адрес (сам сервер AWS).
Поскольку я буду развертывать на нескольких серверах, я не хочу менять URL-адрес AJAX отдельно. Моя идея в том, что я запускаю командную строку «node bin/www», могу ли я изменить ее на «node bin/www 50.50.50.50 (мой адрес AWS)», и я могу установить для всех URL AJAX правильный IP-адрес?
Возможно ли это или другое альтернативное выгорание?
БлагодаряКак установить глобальные переменные командой
ответ
Ваш вопрос связан с CORS: в принципе, вы не можете получить доступ к домену http://www.example1.com
из http://www.example2.com
через Ajax
если http://www.example1.com
прямо не позволяет ему в ответ.
Это функция безопасности в большинстве современных браузеров. Вы не столкнетесь с этой проблемой, используя командную строку, такую как curl
или расширение xrome Postman
.
Чтобы исправить это, убедитесь, что домен запрашивают данные (http://www.example2.com
) допускается в Access-Control-Allow-Origin
заголовке в ответ вашего сервера, а также HTTP глагола (GET
, POST
, PUT
... или *
для каждых методов HTTP).
Это все сводится к тому, добавить две следующие заголовки ответа http://www.example1.com
сервера:
Access-Control-Allow-Origin: http://www.example2.com
Access-Control-Allow-Methods: *
Редактировать
После @ комментарий Paulpro, вы должны перебазироваться все URLs так, что они достигают IP-адрес вашего сервера вместо вашего сервера localhost
.
Спасибо за быстрый ответ! Но у меня есть один вопрос: вы упомянули «Это функция безопасности» в большинстве современных браузеров ». Если я настроюсь так, как вы говорите, это вызовет проблему с веб-безопасностью? Или почему это функция безопасности? –
Эта функция является механизмом безопасности для изоляции потенциально вредоносных документов. Вы можете узнать больше о политике одинакового происхождения здесь: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy. Если вы хотите защитить свой API, см. Редактирование, вы должны указать только домены, вызывающие ваш API, а не '*' – cl3m
Это кажется совершенно неправильным решением. Если запросы отправятся на «127.0.0.1: 3000», веб-сайт будет работать только для пользователей, на которых запущена локальная копия на своем собственном компьютере (IE будет работать для OP, но никто другой). Он не нуждается в CORS, просто нужно изменить все запросы ajax как относительные для домена (или использовать файл конфигурации и сделать домен для них настраиваемым). – Paulpro
исправляю эту проблему.
Во-первых, в bin/www
добавьте этот код, чтобы получить URL-адрес для командной строки и сохранить в json-файл.
function setUpURL(){
var myURL = process.argv[2];
console.log('myURL: ', myURL);
var outputFilename = 'public/myURL.json';
var myData = {
port:myURL
}
fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to " + outputFilename);
}
});
};
Затем в каждом из JS, содержащих Аякса добавить эти символы в главе JS-файла (это необходимо загрузить до того AJAX)
var myURL;
$.getJSON("myURL.json", function(json) {
myURL = json.port.toString();
console.log(myURL);
});
новый формат АЯКС
$.ajax({
type: "POST",
url: myURL + "/forgetPwd",
data: sendData,
success: function(data){
window.location.replace(myURL);
},
error: function(data){
}
});
Наконец, вам может работать сервер
узел bin/www your_aws_ip
Теперь это работает для меня. Надеюсь, они помогут вам, ребята.
Кстати, вы должны быть осторожны относительно пути myURL.json.
- 1. Установить глобальные переменные Codeigniter
- 2. Установить глобальные переменные в Jenkins
- 3. Как установить глобальные переменные в jQuery/JavaScript?
- 4. Как установить глобальные константные переменные в python
- 5. Установить переменные внутри функции как глобальные: Javascript
- 6. python-Как установить глобальные переменные в Flask?
- 7. Как установить глобальные переменные в OpenCart 2.3.0.2?
- 8. Как установить глобальные переменные портала в liferay?
- 9. Android gradle build: как установить глобальные переменные
- 10. Как установить некоторые глобальные переменные в Magento
- 11. Спрайты как глобальные переменные?
- 12. Глобальные переменные
- 13. Глобальные глобальные переменные Django
- 14. Невозможно установить переменные окружения перед командой
- 15. Глобальные переменные?
- 16. struts 2 - где установить глобальные переменные приложения?
- 17. Установить глобальные переменные для javascript и php
- 18. Установить глобальные переменные в классе C#
- 19. Установить глобальные переменные среды Jenkins из файла
- 20. Как создать глобальные переменные?
- 21. Как сделать глобальные переменные?
- 22. Как объявить глобальные переменные?
- 23. Как определить глобальные переменные?
- 24. Как создать глобальные переменные?
- 25. Установить глобальные переменные внутри шаблона Джекил
- 26. Глобальные переменные отталкивателя
- 27. Глобальные переменные в R
- 28. Ansible - глобальные переменные
- 29. Глобальные переменные для подмодуля
- 30. CodeIgniter вопрос глобальные переменные
Это проблема CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS. Вы должны установить заголовки ответа сервера, чтобы разрешить клиенту общаться через Ajax – cl3m
. См. [«Если вопросы включают« теги »в их названиях?»] (Http: //meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны»! –
Я бы предложил удалить 'http: //127.0.0.1: 3000' из всех ваших запросов запроса Ajax. Поэтому измените 'http: //127.0.0.1: 3000/blablabla' на'/blablabla'. Это сделает его относительно домена и порта, так что, если вы обращаетесь к веб-сайту с вашего собственного локального сервера, он будет запрашивать 'http: //127.0.0.1: 3000/blablabla', но если вы получите доступ к нему из какого-либо имени домена или другой IP, он будет использовать это (IE. http://50.50.50.50/blablabla) – Paulpro