Почему политика одного и того же источника срабатывает при отправке запроса с локального хоста на локальный?

Я держу внутренний API как отдельный проект от внешнего приложения HTML5, использующего его. Я использую Yeoman для разработки интерфейса. Yeoman работает на локальном хосте: 3501, а серверная часть — на локальном хосте: 3000. Когда я делаю запрос API из браузера (используя $http AngularJS), я использую ту же политику происхождения:

XMLHttpRequest cannot load http://localhost:3000/venues. Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.

Насколько я знаю, политика одного и того же источника должна срабатывать только при выполнении запроса в разных доменах. Почему он ноет, когда мы делаем запрос с локального хоста на локальный хост (хотя и на другой порт)?

Как я могу заставить это работать и вызовет ли это проблемы в производстве?


person randomguy    schedule 10.01.2013    source источник


Ответы (2)


Порты также учитываются при междоменных запросах, поэтому http://localhost:3000 и http://localhost:3501 являются двумя разными доменами (с точки зрения браузера).

Если вам нужно, чтобы оба приложения (клиентское и серверное) работали на разных портах, рассмотрите возможность использования http://enable-cors.org/.

person bmleite    schedule 10.01.2013

Согласно W3C, "Источник определяется схемой, хостом и портом URL», поэтому другой порт вызывает ваши проблемы.

Два возможных решения:

  • CORS (обмен ресурсами между источниками)
  • Использование запросов JSONP

Оба потребуют изменений в вашем бэкэнде (я недостаточно знаком с этим. CORS, вероятно, будет означать наименьшие изменения в вашем интерфейсе (я думаю, что AngularJS поддерживает его из коробки).

person robertklep    schedule 10.01.2013