我已经阅读了cloudfront:上的缓存密钥文档
https://aws.amazon.com/blogs/networking-and-content-delivery/amazon-cloudfront-announces-cache-and-origin-request-policies/
我有一个lambda@edge由Viewer Request触发的函数。在那里,我将request.uri
设置为从S3获取正确文件所需的值。
从文档中,我没有看到任何关于request.uri
是缓存密钥所考虑的内容的内容。
有没有办法让request.uri
影响缓存密钥?
InLambda@Edge,request.uri
(其中request
对象为event.Records[0].cf.request
(是请求URL的资源(路径(组件,包括文件名和扩展名。
这是始终缓存密钥的一部分。这是默认行为,不能禁用。
默认情况下,[缓存密钥]由CloudFront分发主机名和请求URL的资源部分(路径、文件名和扩展名(组成
https://aws.amazon.com/blogs/networking-and-content-delivery/amazon-cloudfront-announces-cache-and-origin-request-policies/
。。。然而,这并不是完全的答案。
request.uri
的值可以通过查看器请求和/或原始请求触发器进行修改。。。因此,这里的一个重要考虑因素是当为确定缓存密钥而评估该值时?
如果触发器是查看器请求触发器,则缓存键使用触发器运行后的request.uri
值。这意味着,如果查看器请求触发器修改了request.uri
的值(并将修改后的request
对象返回给CloudFront(,则缓存密钥将被修改为包含修改后的值。在查看器请求触发器完成并将控制权返回给CloudFront之后,会立即进行缓存查找。
原始请求触发器中的情况非常不同。在原始请求触发器中修改request.uri
不会更改缓存键(此时缓存键已完全冻结,因为缓存已被检查,并且可缓存响应将存储在生成缓存未命中的同一缓存键下(。原始请求触发器运行前的值是缓存键中的值。
在任一触发类型中更改request.uri
也将更改源服务器接收的请求URI。