当前位置: 首页 > 知识库问答 >
问题:

S3不返回Access-Control-Allow-Origin标头?

闾丘炫明
2023-03-14

我很难强制S3在它从一个bucket返回的所有对象上设置CORS头,尽管启用了CORS,但由于客户端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>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

对象URL示例https://s3.amazonaws.com/captionable/meme/test

有人知道怎么了吗?

共有3个答案

燕烨
2023-03-14

Chrome有一个他们无法修复的惊人缺陷:

如果您足够幸运能够控制生成标签的代码,您可以将Crossorive="匿名"添加到标签中。

顺便说一句,Safari也有这个问题。

端木震博
2023-03-14

我还遇到了一个<代码>

我遇到了这个SO答案并解决了它。我将S3配置中的AlloweOrigin更改为:

<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>

现在S3用访问头进行响应。耶!

缪修德
2023-03-14

首先,确保每个请求都有一个原始头。如果没有发送源报头,S3将不会发送访问控制报头,因为S3认为这些报头不相关(通常是不相关的)。当通过XMLHTTPRequest执行跨源HTTP请求时,浏览器(CORS机制的意思是)将自动发送头。

如果加载带有img的图像,则需要添加属性。请参阅跨原点属性的MDN文档。这将导致浏览器像处理XMLHTTPRequest一样发送原始请求头。

根据山姆·塞利科夫的回答,你可能需要改变

 <AllowedOrigin>http://*</AllowedOrigin>

 <AllowedOrigin>http://*</AllowedOrigin>
 <AllowedOrigin>https://*</AllowedOrigin>

我还没有测试过这个。

根据Paul Draper对这个答案的评论:小心缓存问题。浏览器可能使用不包括适当的访问控制响应头的缓存响应。在开发过程中,您可以清除缓存。在生产中,如果资源以前是以静态方式使用的,则必须切换到该资源的新URL。

 类似资料:
  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?

  • 我从ASP.NET表单中调用这个函数,在调用Ajax时在firebug控制台中得到以下错误。 跨源请求被阻止:同一源策略不允许读取http://anotherdomain/test.json上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 我做了其他的方法,但仍然找不到解决办法。 注意:我没有服务器权限进行服务器端(API/URL)更改。

  • 问题内容: 我是Ajax的新手,只是受过此跨域调用的任务。我们的网页上有一个文本框,用户可用来执行公司名称搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,Web服务位于单独的域中,因此自然会引起问题。 以下是我使这项工作的最佳尝试。我还要注意,此调用的目的是以XML格式返回结果,该结果将在请求的一部分中进行解析。 这又是错误消息: 对于解决方法,我不知所措,将不胜感激任何想法。 问题

  • 我正在使用React制作简单的应用程序,将ajax请求发送到使用Symfony制作的API。我正在开发反应应用程序和Symfony api。我将请求从localhost:3000发送到localhost:8000。这是我发送的ajax请求 这是Symmfony应用程序,负责处理请求 我到目前为止在开始,你可以看到我正在创建没有密码,安全或任何东西的新用户。我只想让它工作,并能够发送请求从应用程序到