301 ответ с «запросом перекрестного источника заблокирован», несмотря на то, что настроены правильные заголовки CORS - PullRequest
1 голос
/ 28 марта 2020

Я получаю доступ к изображениям НАСА с их опубликованными c API, но я получаю эту ошибку:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at
[nasa api website] (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

Но когда я проверяю их заголовок ответа, 'Access-Control-Allow-Origin' присутствует и установлен на «*», здесь вы можете увидеть его:

Заголовки ответа:

Access-Control-Allow-Origin *
Age 0
Cache-Control   max-age=0, private, must-revalidate
Content-Encoding    gzip
Content-Type    application/json; charset=utf-8
Date    Sat, 28 Mar 2020 14:37:13 GMT
Etag    W/"e26hidden..."
Referrer-Policy strict-origin-when-cross-origin
Server  openresty
Strict-Transport-Security   max-age=31536000; includeSubDomains
Vary    Origin
Via https/1.1 api-umbrella (ApacheTrafficServer [cMsSf ]), 1.1 vegur
X-Cache MISS
X-Content-Type-Options  nosniff
X-Download-Options  noopen
X-Frame-Options SAMEORIGIN
X-Permitted-Cross-Domain-Policies   none
X-RateLimit-Limit   1000
X-RateLimit-Remaining   999
X-Request-Id    00c8c415-37ad-474b-bfbd-8e968d60f37f
X-Runtime   0.125778
X-Xss-Protection    1; mode=block

Заголовки запроса:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding gzip, deflate, br
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Host    api.nasa.gov
If-None-Match   W/"e26chidden.."
Upgrade-Insecure-Requests   1
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/999991 Firefox/74.0

1 Ответ

1 голос
/ 01 апреля 2020

Существует распространенная ошибка, которая может возникнуть при указании 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.

...