让S3始终在其响应中包含Vary标头

Old*_*Pro 9 cdn amazon-s3 http-headers cors

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

如何让S3始终返回Vary标题?

Rya*_*man 5

原因是啰嗦,但简单的答案是:不能.无论如何,目前还没有.

[TL; DR]

在S3中,Vary不是用户可配置的标头.虽然S3可以提供CORS标头,但CloudFront并没有明确支持它.

如果您的最终目标是使用S3作为源来提供来自CloudFront的CORS支持内容,我最终通过部署位于S3和CloudFront之间的应用程序来解决该问题,该应用程序代理请求并始终将正确的CORS标头添加到S3的响应使CloudFront缓存正确的数据.

优点:

  • CloudFront将CORS响应标头与S3数据一起缓存.
  • CloudFront继续以100%的性能运行.
  • 代理应用程序非常小,可以在t1.micro上运行.

缺点:

  • 不像S3 + CloudFront正确地为CORS请求一起工作那么简单.
  • 编写和部署应用程序.