公共存储桶的 S3 CORS 策略

2024-05-04

这似乎很容易,但我不知道我错过了什么。 我有一个公共存储桶,其中包含从我的网站获取的 js 脚本。我注意到我没有发送Origin标头到 S3,这不是必需的,并且无需任何 CORS 配置即可正常工作。

更重要的是,即使我手动将 Origin 标头添加到该 GET 调用并通过以下方式明确禁止 GET 和我的域:

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

我仍然可以获得内容。这里发生了什么?


好吧,在与 Quentin 交谈之后,我想我明白了我在哪里误解了 CORS 应该如何工作。 在 Java 世界中,当 Origin 不匹配时实际拒绝请求是一种非常常见的做法。这是另一个线程提及 https://stackoverflow.com/questions/14015118/what-is-the-expected-response-to-an-invalid-cors-request/14064273#14064273。 如果我们以 Spring 为例(这是 Java 世界事实上的标准),添加 CORS 过滤器时会发生以下情况:

    String allowOrigin = checkOrigin(config, requestOrigin);
    ...

    if (allowOrigin == null) {
        logger.debug("Reject: '" + requestOrigin + "' origin is not allowed");
        rejectRequest(response);
        return false;
    }

where:

/**
 * Invoked when one of the CORS checks failed.
 */
protected void rejectRequest(ServerHttpResponse response) {
    response.setStatusCode(HttpStatus.FORBIDDEN);
}

你可以找到代码here https://github.com/spring-projects/spring-framework/blob/master/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java#L103.

但令我惊讶的是,这对于其他堆栈和服务器端技术来说并不常见。另一种常见的方法是将它们拥有的任何 CORS 配置发送到浏览器,并将决定权留给浏览器。

S3 更加棘手:只有当存储桶 CORS 规则与启用 CORS 的请求(具有 Origin 标头的请求)匹配时,它才会发送 CORS 响应标头。否则,将不会有 CORS 响应标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

公共存储桶的 S3 CORS 策略 的相关文章

随机推荐

  • ListenableFuture 到 scala Future

    我正在围绕 java 库编写一个小型 scala 包装器 java 库有一个对象 QueryExecutor 公开了 2 个方法 执行 查询 结果 asyncExecute 查询 ListenableFuture 结果 在这种情况下 Lis
  • Spring Data Mongo 无法找到 Enum 的 PersistentEntity

    编辑 我发现了一个相关问题here https stackoverflow com questions 28972455 does spring data mongodb support enums 但仅有的两个答案相互矛盾 并且没有足够的
  • Scikit-learn 具有使用“特征”的自定义评分函数

    我正在尝试使用一种名为 SERA 平方误差相关区域 的新指标作为本文中提到的不平衡回归的自定义评分函数 https link springer com article 10 1007 s10994 020 05900 9 https lin
  • python 命令行应用程序的最佳布局是什么?

    什么是正确的方法 或者我会满足于good方式 布置一个中等复杂度的命令行 python 应用程序 我使用 Paster 创建了一个 Python 项目框架 它为我提供了一些文件 myproj init py MyProj egg info
  • 在 PHP 中自动加载类的最佳方法

    我正在开发一个项目 该项目具有以下文件结构 index php lib lib type class name php lib size example class php 我想自动加载类 class name 和 example clas
  • 如何学习使用内容存储库和 Apache JackRabbit?

    在 Apache JackRabbit 网站中完成 第一跳 后 我该去哪里 我不明白如何创建不在内存中的存储库以及如何配置它等等 欢迎来到我的世界 Jackrabbit 文档有点乱 你将不得不进行一些认真的谷歌搜索 但是 那Wiki htt
  • 如何在 Visual Studio Code 中将默认浏览器设置为 chrome?

    我是第一次设置 VS Code 环境 但我不知道如何将 Chrome 设置为工作区的默认浏览器 转到文件 gt 首选项 gt 用户设置 gt 搜索 默认情况下它将打开您默认最喜欢的浏览器 设置您的浏览器
  • 有人可以解释一下这个 OCaml 程序中使用的类型语法吗?

    以下类型取自这个问题 https stackoverflow com q 50586942 633183 contains an error later fixed by the OP type task Success a gt a ta
  • Fixture_file_upload 有 {file} 不存在错误

    下面是我的上传文件的测试代码 describe file process do before each do debugger file fixture file upload test csv text csv end it should
  • PHP mysql 土耳其语字符编码及比较

    我正在尝试通过 AJAX POST 从 MySql 数据库中过滤土耳其语姓名 英文字母单词列出一切正常 但是如果我发送 这是带点的字母 O 结果不仅是 还包括 O 和 另外我注意到 AJAX 帖子被发送 作为 C3 96 有人可以帮忙吗 请
  • Android Studio 支持子风格吗?

    我有一个 Android Studio 项目 当前在 build gradle 中有 2 个产品风格 如下所示 productFlavors parent applicationId xxx parent teacher applicati
  • Ionic 2 如何更改模态高度和宽度

    我的应用程序上有一个页面有一个模态页面 我想更改该页面的大小 我尝试使用模型属性来更改它 但它会更改所有其他页面的大小 我想要不同的不同尺寸的型号 modal inset min width 将其添加到您的app scss my modal
  • 基于接口的匿名类定义......也许?

    我在书中看到了这个Java片段春天在行动 但我不熟悉语言结构 new RowMapper public Object mapRow throws SQLException DataAccessException Motorist motor
  • 如何从数组中删除空数组值(“”)?

    我有一个二维数组 是用 jQuery 从 html 表生成的 但有些值是空的 所以 被展示 如何删除空值 table tr th 1A th th 1B th th 1C th tr tr td 2A td td 2B td td 2C t
  • Xcode 6 自适应故事板每个设备有不同的 Segues

    我对 Xcode 6 中新引入的自适应故事板遇到了一些麻烦 iPhone 应用程序已经完成 现在我想用它创建一个通用应用程序 假设我有一个viewcontroller显示一些单元格和详细信息viewcontroller其中显示单元格的详细信
  • 使用 require 而不导出

    我有从在线资源借用的这段代码 效果非常好 var express require express var bodyParser require body parser var logger require morgan var app ex
  • matplotlib 中散点图的轴限制不成立

    我正在尝试使用 matplotlib 将散点图叠加到等值线图上 其中包含 plt contourf X Y XYprof T self nLevels extent extentYPY origin lower if self doScat
  • 如何在命令提示符下运行Java程序

    我创建了一个 Java 项目来调用 Web 服务 它有一个主 java 文件和另一个类文件 我已经为 HTTP 客户端使用了一些 jar 文件 在 Eclipse 中运行良好 我需要通过传递一些参数在命令提示符下运行 Java 程序 在命令
  • 如何升级Visual Studio 2019中使用的ESLint版本?

    我将 ESLint 与 Visual Studio 2019 结合使用 集成效果很好 我可以直接在 IDE 中看到 ESLint 错误 但是当我向配置文件添加更多规则时 例如无异步承诺执行器 https eslint org docs ru
  • 公共存储桶的 S3 CORS 策略

    这似乎很容易 但我不知道我错过了什么 我有一个公共存储桶 其中包含从我的网站获取的 js 脚本 我注意到我没有发送Origin标头到 S3 这不是必需的 并且无需任何 CORS 配置即可正常工作 更重要的是 即使我手动将 Origin 标头