Помилка CORS в тому ж домені?


86

Зараз я стикаюся з дивною проблемою CORS.

Ось повідомлення про помилку:

XMLHttpRequest cannot load http://localhost:8666/routeREST/select?q=[...] 
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

Два сервери:

  • localhost: 8666 / routeREST /: це простий сервер Python Bottle.
  • localhost: 8080 /: Python simpleHTTPserver, де я запускаю y додаток Javascript. Ця програма виконує запити Ajax на сервері вище.

Будь-яка думка про те, що може бути проблемою?

РЕДАГУВАТИ:

І ... проблема була в порту. Дякую за відповіді :)

Якщо хтось також використовує сервер пляшок Python, ви можете слідувати відповіді, даній у цій публікації, щоб вирішити проблему CORS: Bottle Py: Увімкнення CORS для запитів jQuery AJAX


10
Оскільки вони знаходяться в різних портах, вони не однакові!
дещо

Номери портів різні. Це може порушити правила перехресного походження.

4
Зауважте, що IE не враховує номер порту.
Ray Nicholus

@some Більшість браузерів також приходять до висновку, що вони не однакові, якщо один має "www", а інший - ні. Диявол у подробицях.
Рідко `` Де Моніка '' потрібна

@SeldomNeedy example.com, www.example.com, www1.example.com та mirror.www.example.com - це різні домени. example.com , example.com , example.com , example.com:80443 мають різне походження.
дещо

Відповіді:


122

Вважається однаковим, лише якщо протокол , хост і порт однакові: однакова політика походження

Якщо ви хочете його увімкнути, ви повинні слідувати спільному використанню ресурсів (cors) , додаючи заголовки. Mozilla має приклади

Вам потрібно додати Access-Control-Allow-Origin як заголовок у своїй відповіді. Щоб дозволити всім (вам, мабуть, НЕ слід цього робити):

Access-Control-Allow-Origin: *

Якщо вам потрібно підтримати декілька джерел (наприклад, обидва example.comта www.example.com), встановіть Access-Control-Allow-Originу своїй відповіді значення Origin-header із запиту (після того, як ви переконаєтесь, що джерело внесено до білого списку.)

Також зауважте, що деякі запити надсилають попередній запит із методом OPTION, тому, якщо ви пишете власний код, ви також повинні обробляти ці запити. Дивіться приклади Mozilla .


8
Це слід виділити червоним кольором, великими літерами та жирним шрифтом скрізь, де бере участь AJAX.
Золтан Шмідт,

5
В якості доповнення до цієї відповіді, відзначимо , що 'Access-Control-Allow-Origin: https://example.com'це НЕ еквівалентно 'Access-Control-Allow-Origin: https://www.example.com'. Якщо ваш сайт доступний через обидва з них, ви повинні мати обидва в заголовках відповідей.
Рідко `` Де Моніка '' потрібна

1
Зверніть увагу, що за промовчанням для простих запитів, таких як GET, POSTта HEAD. Додаткові відомості див. У статті MDN, на яку посилається відповідь .
Еміль Бержерон,

@SeldomNeedy, у вас не можуть бути дубльовані заголовки
Mike Flynn

@MikeFlynn Моє формулювання, правда, було трохи вільним, але я не намагався цього припустити; сервер просто потрібно налаштувати для надсилання відповідного заголовка відповідно до запиту.
Рідко "Де Моніка"

31

Номери портів різні.

Запит вважається міждоменним, якщо будь-яка схема, ім’я хосту або порт не збігаються.


1
За винятком 443 та 80.
Джозеф Луст

15
в тому числі 443 та 80
code_monk

4
Як підтвердження проблеми може бути рішенням проблеми? Опублікуйте відповідь чувак.
Ritesh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.