Существует распространенная ошибка, которая может возникнуть при указании URL-адреса для запроса кросс-источника в коде, и эта ошибка может привести к тому, что браузеры в конечном итоге сообщат об ошибке CORS, хотя на самом деле проблема является просто легко пропускаемой ошибкой в самом URL запроса.
Ошибка просто отсутствует "s"
: использование "http"
в качестве части протокола URL вместо "https"
.
Это отсутствие "s"
вызывает сервер, который вы отправили запрос на ответ с перенаправлением 3xx на эквивалентное https
расположение этого URL - но проблема в том, что по умолчанию многие / большинство серверов не включают заголовок Access-Control-Allow-Origin
в ответах 3xx. Таким образом, браузер получает этот 3xx, но из-за отсутствия заголовка Access-Control-Allow-Origin
браузер отказывается позволить вашему коду следовать перенаправлению; вместо этого браузер останавливается прямо здесь и выдает ошибку CORS.
Поэтому, когда вы сталкиваетесь с подобным случаем, способ его устранения состоит в следующем: откройте панель «Сеть» в devtools и проверьте ответ. Проверьте код состояния ответа, показанный там, и проверьте заголовки ответа. Если причиной является ошибка, описанная в этом ответе, вы увидите заголовок ответа Location
. Это значение является URL-адресом, на который сервер пытается перенаправить запрос.
И если вы посмотрите на значение Location
, вы можете сначала подумать, что оно точно совпадает с URL-адресом запроса, который есть в вашем коде. - потому что легко не заметить, что разница в том, что пропущен один "s"
. Но, конечно, если вы возьмете URL-адрес в этом значении Location
и замените им URL-адрес запроса в своем коде внешнего интерфейса, и это сработает, тогда разница станет очевидной.
Так что в случае URL-адреса в В этом вопросе проблема заключалась лишь в том, что в коде внешнего интерфейса указан http://mars.jpl.nasa.gov
URL, который вместо этого должен быть https://mars.jpl.nasa.gov
URL.