为什么不是';t';变化:原点';对CORS失误的回应?

为什么不是';t';变化:原点';对CORS失误的回应?,cors,cdn,amazon-cloudfront,azure-cdn,Cors,Cdn,Amazon Cloudfront,Azure Cdn,发出CORS请求时,如果请求的原点在允许原点列表中,则响应包含访问控制允许原点标题和更改:原点标题 Vary:Origin告诉forward cdn等,响应是基于请求者Origin头值协商的 问题是(我已经测试了主要的CDN提供者),如果请求者没有在他们的请求中提供Origin头,或者Origin值不是允许的值之一,那么响应中就不包括Vary:Origin 执行COR的CDN是否应始终在响应标题中响应Vary:Origin?如果不响应,CDN将认为它可以对任何Origin值提供相同的响应。同样,

发出CORS请求时,如果请求的原点在允许原点列表中,则响应包含
访问控制允许原点
标题和
更改:原点
标题

Vary:Origin告诉forward cdn等,响应是基于请求者Origin头值协商的

问题是(我已经测试了主要的CDN提供者),如果请求者没有在他们的请求中提供Origin头,或者Origin值不是允许的值之一,那么响应中就不包括Vary:Origin


执行COR的CDN是否应始终在响应标题中响应Vary:Origin?如果不响应,CDN将认为它可以对任何Origin值提供相同的响应。同样,可以通过使用随机源值发出许多请求来填充CDNs缓存。

是。如果请求可能包含具有不同值的
访问控制允许原点
,则CDN应始终使用
Vary:Origin
响应,即使对于没有
访问控制允许原点
头的响应也是如此。您的分析是正确的:如果标头不总是存在,则可能会用不正确的值填充缓存。

正如我所想。我一直在怀疑自己,因为Amazon CloudFront和Azure CDN只返回Vary:Origin,当Origin存在并匹配时,否则会忽略它。只有谷歌的输出不同:每个请求的来源。我想知道为什么这个问题在网络上很少出现?它不经常出现(因为白名单起源的CORS实现很少,大多数只是使用*),而且当它出现时,很难调试。我在CORS中有一个关于这一点的章节。当使用Amazon CloudFront和web源站(而不是S3)时,也报告了这个问题,将源站标题从CloudFront转发到您的源站将避免这个问题。这理解正确吗?实际上,这导致了Chrome的一些问题:。难怪谷歌的输出会有所不同:每个请求的来源都不同