我有CORS标头设置在S3上,而当一个浏览器发出CORS请求(即包括Origin
报头),S3将所有正确的报头添加到响应,包括一个Vary
标题。但是,如果请求不包含Origin
标头,则该响应不包括Vary
标头,这会使中间高速缓存(例如CDN)免费缓存响应,并在稍后的请求进入时提供该响应,即使稍后的请求添加一个Origin
标题。获取S3总是包括在其响应一个Vary头部
如何让S3始终返回Vary
表头?
我有CORS标头设置在S3上,而当一个浏览器发出CORS请求(即包括Origin
报头),S3将所有正确的报头添加到响应,包括一个Vary
标题。但是,如果请求不包含Origin
标头,则该响应不包括Vary
标头,这会使中间高速缓存(例如CDN)免费缓存响应,并在稍后的请求进入时提供该响应,即使稍后的请求添加一个Origin
标题。获取S3总是包括在其响应一个Vary头部
如何让S3始终返回Vary
表头?
该为什么是啰嗦,但简短的回答是:你不能。无论如何,目前还没有。
[TL; DR]
在S3中,Vary
不是用户可配置的报头。虽然S3可以提供CORS头文件,但CloudFront并未明确支持它。
如果您的最终目标是使用S3作为您的源提供来自CloudFront的支持CORS的内容,我最终通过部署位于S3和CloudFront之间的应用程序来解决此问题,该应用程序代理请求并始终添加将CORS标头更正为S3的响应,以便CloudFront缓存正确的数据。
优点:
缺点:
上报告过其实,如果您看一下“相关“的问题,你会看到几个问题,包括答案。 –
我没有使用CloudFront。我没有看到任何“相关”问题,解释如何让S3总是发送一个'Vary'头。 –
在这种情况下,答案是“否”。您不能强制S3始终发送Vary标题。有关响应的更多信息,请参阅http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html和http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html。 S3返回的标头。 –
此问题也已在[AWS S3论坛](https://forums.aws.amazon.com/thread.jspa?messageID=555417) –