我在 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/