access-control-allow-origin header missing from objects even after adding CORS settings in Digitalocean Spaces UI(即使在DigitalOcean Spaces用户界面中添加CORS设置后,对象中也缺少访问控制-允许-原点标头)
问题描述
我在DigitalOcean Spaces用户界面中添加了CORS配置,如下所示:
我仍然无法从浏览器获得对象请求的Access-Control-Allow-Origin头。
从我的后端上载对象时,";PUBLIC-Read";设置为ACL。
我期望在浏览器中从我的Web应用程序发出对象(在我的例子中为图像)请求时,其响应标头应为access-control-allow-origin: http://my.machine.localhost
。
当画布组件具有来自非来源来源的图像时,这是HTML canvas toDataURL()的硬要求。
推荐答案
首先是本地主机问题
do(DigitalOCean)不允许您在CORS来源字段中配置本地主机。为此,您可以更新您的/etc/hosts
,为您的本地主机提供一个可接受的名称。我有
127.0.0.1 my.machine.localhost
这样很容易在Do Spaces CORS设置中进行配置,然后在浏览器中点击my.machine.localhost就可以打开在本地主机上运行的应用程序(我在端口80上运行我的应用程序)。
第二,CORS标题
关闭CDN,直到问题解决或需要多次刷新缓存。使用curl
或httpie
或类似于测试的内容,因为浏览器倾向于缓存对象。
我假设对象是使用public-read
ACL上载的。
现在使用curl或HTTPIE检查请求和响应标头。
$ http -v https://***.***.digitaloceanspaces.com/static/images/logo.png
这里有一个棘手的部分--即使您配置了CORS,响应也不会有access-control-allow-origin
头。要使其正常工作,您需要在请求中设置Origin
标头,该标头需要与存储桶的Do Spaces UI中配置的至少一个来源相匹配。
$ http -v https://***.***.digitaloceanspaces.com/static/images/logo.png "Origin:http://my.machine.localhost"
这将根据您的配置返回access-control-allow-origin
和access-control-allow-methods
。
Do Spaces实施与AWS S3相同的API。因此,最好在卡住时查找S3文档。我在AWS S3 CORS文档https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html中找到了这个
如果标头丢失,Amazon S3不会将请求视为 跨域请求,并且不在 响应。
有许多在线教程建议使用s3cmd并使用通配符设置CORS*
-在执行这些操作之前要三思而后行,因为这非常不安全。
这篇关于即使在DigitalOcean Spaces用户界面中添加CORS设置后,对象中也缺少访问控制-允许-原点标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:即使在DigitalOcean Spaces用户界面中添加CORS设置后,对象中也缺少访问控制-允许-原点标头
基础教程推荐
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 动态更新多个选择框 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01