Ошибка 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, на котором я запускаю приложение Javascript. Это приложение выполняет запросы Ajax на указанном выше сервере.

Есть мысли о том, в чем может быть проблема?

РЕДАКТИРОВАТЬ:

И ... проблема была в порте. Спасибо за ответы :)

Если кто-то также использует сервер бутылки Python, вы можете следовать ответу, приведенному в этом сообщении, чтобы решить проблему CORS: Bottle Py: включение CORS для запросов jQuery AJAX


10
Так как они на разных портах не совпадают!
некоторые

Номера портов разные. Это может нарушать правила Cross Origin.

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

Это считается таким же, только если протокол , хост и порт совпадают: одна и та же политика происхождения.

Если вы хотите включить его, вы должны следовать Cross-Origin Resource Sharing (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, у вас не может быть повторяющихся заголовков
Майк Флинн

@MikeFlynn По общему признанию, моя формулировка была нечеткой, но я не пытался это предложить; сервер просто нужно настроить для отправки соответствующего заголовка в соответствии с запросом.
Редко нуждающийся 'Где Моника'

31

Номера портов разные.

Запрос считается междоменным, если какая-либо схема, имя хоста или порт не совпадают.


1
Кроме 443 и 80.
Джозеф Ласт

15
в том числе 443 и 80
code_monk

4
Как подтверждение проблемы может быть решением проблемы? Отправьте ответ чувак.
Ритеш
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.