ded*_*epe 6 javascript xmlhttprequest cors http-status-code-301
我正在使用其公共 api 访问 NASA 图片,但收到此错误:
\n\nCross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at\n[nasa api website] (Reason: CORS header \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing).\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我检查他们的响应头时, \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 存在并设置为 \'*\',在这里你可以看到它:
\n\n响应标头:
\n\nAccess-Control-Allow-Origin *\nAge 0\nCache-Control max-age=0, private, must-revalidate\nContent-Encoding gzip\nContent-Type application/json; charset=utf-8\nDate Sat, 28 Mar 2020 14:37:13 GMT\nEtag W/"e26hidden..."\nReferrer-Policy strict-origin-when-cross-origin\nServer openresty\nStrict-Transport-Security max-age=31536000; includeSubDomains\nVary Origin\nVia https/1.1 api-umbrella (ApacheTrafficServer [cMsSf ]), 1.1 vegur\nX-Cache MISS\nX-Content-Type-Options nosniff\nX-Download-Options noopen\nX-Frame-Options SAMEORIGIN\nX-Permitted-Cross-Domain-Policies none\nX-RateLimit-Limit 1000\nX-RateLimit-Remaining 999\nX-Request-Id 00c8c415-37ad-474b-bfbd-8e968d60f37f\nX-Runtime 0.125778\nX-Xss-Protection 1; mode=block\nRun Code Online (Sandbox Code Playgroud)\n\n请求标头:
\n\nAccept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\nAccept-Encoding gzip, deflate, br\nAccept-Language en-US,en;q=0.5\nConnection keep-alive\nHost api.nasa.gov\nIf-None-Match W/"e26chidden.."\nUpgrade-Insecure-Requests 1\nUser-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/999991 Firefox/74.0\nRun Code Online (Sandbox Code Playgroud)\n
sid*_*ker 10
在代码中为跨源请求指定 URL 时,\xe2\x80\x99 可能会出现一个常见错误,该错误可能会导致浏览器最终报告 CORS 错误,而实际上问题很简单-忽略请求 URL 本身的错误。
\n错误只是缺少"s":使用"http"作为 URL 协议部分而不是"https".
这种缺失会"s" 导致您发送请求的服务器以 3xx 重定向响应到https该 URL 的等效位置。但问题是:默认情况下,许多/大多数服务器不会Access-Control-Allow-Origin 在 3xx 响应中包含该标头。因此浏览器得到了 3xx,但由于它缺少Access-Control-Allow-Origin 标头,浏览器拒绝让您的代码遵循重定向;相反,浏览器会立即停止并发出 CORS 错误。
因此,当您遇到此类情况时,解决方法是:在 devtools 中打开“网络”窗格并检查响应。检查那里显示的响应状态代码并检查响应标头。如果原因是此答案中描述的错误,您\xe2\x80\x99将看到Location响应标头。该值是服务器尝试将请求重定向到的 URL。
当您查看该Location值时,您最初可能会认为它\xe2\x80\x99s 与代码中的请求 URL 完全相同,因为\xe2\x80\x99s 很容易忽视,区别只是那么一个丢失的"s"。但是当然,如果您采用该Location值中的 URL 并用它替换前端代码中的请求 URL,并且它有效,那么差异就会变得明显。
因此,就本问题中的 URL 而言,问题只是前端代码指定了一个http://mars.jpl.nasa.gov应该是https://mars.jpl.nasa.govURL 的 URL。
| 归档时间: |
|
| 查看次数: |
7575 次 |
| 最近记录: |