为什么不在CORS未命中设置'Vary:Origin'响应?

sim*_*olo 20 cdn cors amazon-cloudfront azure-cdn

在发出CORS请求时,如果请求的Origin位于允许的源列表中,则响应包含Access-Control-Allow-Origin标头和Vary: Origin标头.

Vary:Origin告诉CDNs等,响应是根据请求者的Origin头值协商的.

问题是(我已经测试了领先的CDN提供商),如果请求者在他们的请求中没有提供Origin头,或者Origin值不是允许的那个,则响应不包括变化:起源于回应.

如果CDN预先形成CORS总是在响应头中响应Vary:Origin吗? 如果不是,CDN会认为它可以对任何Origin值提供相同的响应.然后,通过使用随机原始值进行许多请求,可以填充CDN缓存.

mon*_*sur 22

是.如果请求可能包含Access-Control-Allow-Origin具有不同值的请求,则CDN应始终响应Vary: Origin,即使对于没有Access-Control-Allow-Origin标头的响应也是如此.您的分析是正确的:如果标头不总是存在,则可以使用不正确的值填充缓存.

  • 它并不经常出现(因为COREL实现的白名单起源较少,大多数只是使用*),并且当它确实存在时,很难调试.我在CORS in Action中有一节介绍. (2认同)
  • [AWS S3论坛]上也报告了此问题(https://forums.aws.amazon.com/thread.jspa?messageID=555417?) (2认同)