amazon-s3 - 让 S3 始终在其响应中包含 Vary header

标签 amazon-s3 http-headers cors cdn

我在 S3 上设置了 CORS header ,当浏览器发出 CORS 请求(即包含 Origin header )时,S3 会将所有正确的 header 添加到响应中,包括 改变 header 。但是,如果请求不包含 Origin header ,则响应也不包含 Vary header ,这使得中间缓存(例如 CDN)可以自由地缓存响应,并且当后面的请求到来时提供它,即使后面的请求添加了 Origin header 。

如何让 S3 始终返回 Vary header ?

最佳答案

原因很冗长,但简短的答案是:你不能。无论如何,目前还没有。

[TL;DR]

在 S3 中,Vary 不是用户可配置的 header 。虽然 S3 可以传递 CORS header ,但 CloudFront 没有明确支持它。

如果您的最终目标是使用 S3 作为源从 CloudFront 交付支持 CORS 的内容,我最终通过部署一个位于 S3 和 CloudFront 之间的应用程序来解决这个问题,该应用程序代理请求并始终添加正确的请求S3 响应的 CORS header ,以便 CloudFront 缓存正确的数据。

优点:

  • CloudFront 会缓存 CORS 响应 header 以及 S3 数据。
  • CloudFront 继续以 100% 的性能运行。
  • 代理应用非常小,可以在 t1.micro 上运行。

缺点:

  • 不像 S3+CloudFront 正确协同处理 CORS 请求那么简单。
  • 编写并部署应用。

关于amazon-s3 - 让 S3 始终在其响应中包含 Vary header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21325048/

相关文章:

html - 同源限制阻止来自同源的字体

amazon-web-services - 对 Amazon AWS S3 中托管的网站使用访问计数器

amazon-s3 - aws s3 ls 读取操作超时

google-app-engine - 从 GAE 请求时从 make_fetch_call 中删除 header (用户代理)

java - 如何从 Java 中的 HTTP header 中检索 IP 地址

node.js - Netlify NodeJS 函数始终返回 'Response to preflight request doesn' t pass'

php - 允许 artisan 服务中的 cors

java - AWS S3 : Get Last Modified Timestamp Java

json - 使用 CloudFront 防止 Amazon S3 上的热链接

http - bzip2 和 x-bzip2 有什么区别