gpt4 book ai didi

javascript - 由于 CORS,无法从 S3 存储桶中获取图像

转载 作者:数据小太阳 更新时间:2023-10-29 04:46:56 25 4
gpt4 key购买 nike

问题是当我尝试使用 Access-Control-Allow-Origin 获取时出现 cors 错误(响应 header 不包含 fetch)应用程序接口(interface)。这是我在 S3 中的 cors 配置 -

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

代码可以在这里找到—— https://codepen.io/sourov0805045/pen/OKVBXM?editors=1111

我检查了响应 header ,发现它不包含 Allow-Access-Control-Origin header 。

但是如果我将它添加到 <img> 中,它就可以正常工作标签这很令人费解。那时候没有Access-Control-Allow-Origin也在响应 header 中,但图像加载正确。

A 已经尝试过与 axios 相同的方法没有效果。

请让我知道您对如何解决此问题的建议。

最佳答案

首先从删除不必要的变量开始:从命令行使用 cURL。

第 1 步:发出飞行前 OPTIONS 请求:

curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: GET" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
'https://twisker-s3-files.s3.us-east-2.amazonaws.com/files/-GxfyX_dZ-6313383.jpg'

您要在输出中查找的响应 header 是:

...
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET, POST, PUT, HEAD, DELETE
< Access-Control-Allow-Headers: x-requested-with
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
...

第 2 步:发出 GET 请求:

~ $ curl --head 'https://twisker-s3-files.s3.us-east-2.amazonaws.com/files/-GxfyX_dZ-6313383.jpg' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' -H 'Referer: https://cdpn.io/boomboom/v2/index.html?editors=1111&key=iFrameKey-a88ea9ee-51a6-0ae2-7350-951a5b1e4e56' -H 'Origin: https://cdpn.io' --compressed

这是响应:

HTTP/1.1 200 OK
x-amz-id-2: 9D3J5BnHo7YocXQicso+eQAC/PlyoOMpc5QXd+G77HMtWTOd8kYymcJnQ0T8J7tqXetMZgVO8Rw=
x-amz-request-id: 6CE1579D5B039163
Date: Thu, 25 Jul 2019 02:18:41 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, HEAD, DELETE
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Last-Modified: Wed, 26 Jun 2019 19:18:40 GMT
ETag: "8e26c03714ab4d8e185c29b1c04639f0"
Accept-Ranges: bytes
Content-Type: application/octet-stream
Content-Length: 1573767
Server: AmazonS3

注意事项:

  1. Access-Control-Allow-OriginAccess-Control-Allow-Methods 存在
  2. 它们的值看起来是正确的,所以 CORS 应该适合你(它在你的 URL 上对我有用)

https://www.test-cors.org可用于测试 CORS 请求。它在请求的每个阶段给出一些输出。

最后,浏览器非常积极地缓存飞行前的 OPTIONS 请求。所以如果你正在查看 chrome 网络调试工具,你可能看不到飞行前的 OPTIONS 请求。有时重新启动 chrome 会清除 OPTIONS 缓存,有时需要清除所有浏览器缓存。

如果您没有正确配置服务器端的 CORS,并且浏览器缓存了响应,则此缓存可能会出现问题。例如:当您最初配置 CORS 时,您不允许 GET。您发出 OPTIONS 请求,浏览器缓存响应,阻止以后的 GET 请求。

关于javascript - 由于 CORS,无法从 S3 存储桶中获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com