Можно ли использовать XMLHttpRequest на другом порту из файла script, загруженного с этого порта?
У меня есть сайт, на котором используется XMLHttpRequest (на самом деле jQuery). У меня также есть другой сайт, работающий на том же сервере, который обслуживает файл script, который возвращает запросы XHR на этот сайт, т.е.
http://mysite:50000/index.html включает
<script src="http://mysite:9000/otherscript.js"></script>
и http://mysite:9000/otherscript.js включает
$.ajax({
url: 'http://mysite:9000/ajax/stuff'
});
Проблема - это не работает. Запросы AJAX из загруженного script просто провалятся без сообщения об ошибке. Из того, что я смог найти, это старая политика происхождения. Учитывая, что я контролирую оба сайта, есть ли что-нибудь, что я могу сделать, чтобы сделать эту работу? Трюк "document.domain", похоже, ничего не делает для XMLHttpRequest.
Ответы
Ответ 1
Невозможно сделать это с помощью XHR. Политика одного домена очень ограничена тем же хостом, тем же портом и тем же протоколом. Сожалею! Вам придется прибегать к другим трюкам (iframes, манипуляции с заголовками и т.д.), Чтобы заставить его работать.
Ответ 2
вы можете сделать это, добавив заголовок Access-Control-Allow-Origin
.
Если вы используете php
header("Access-Control-Allow-Origin: http://example.com");
или в node.js
response.writeHead(200,{'Access-Controll-Allow-Origin':' http://example.com'});
это должно сделать трюк для u, он всегда работает для меня
Ответ 3
Я только что решил аналогичную проблему с сервисом PHP, с которым я сейчас играю (не уверен, насколько релевантно это решение для PHP, но...), создав страницу PHP с прокси-сервером SimpleProxy.php
<?php
echo file_get_contents('http://localhost:4567');
?>
И в моем XMLHttpRequest я использую 'SimpleProxy.php' вместо 'http://localhost:4567', который эффективно помещает запрос на тот же домен, что и мой .js-код.