Можно ли использовать 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-код.