当前位置: 首页 > 知识库问答 >
问题:

lambda@edge缓存-控件头不存在Cloudfront

薛坚
2023-03-14

我在S3上存储了图像,并使用lambda函数动态调整图像大小。在此过程中,我将cacheControl:'max-age=31536000'添加到调整大小的图像中,并添加一个缓存控件头:

.then(buffer => {
  // save the resized object to S3 bucket with appropriate object key.
  S3.putObject({
    Body: buffer,
    Bucket: BUCKET,
    ContentType: 'image/jpg',
    CacheControl: 'max-age=31536000',
    Key: `uploads/${key}`,
  })

  // generate a binary response with resized image
  response.status = 200
  response.body = buffer.toString('base64')
  response.bodyEncoding = 'base64'
  response.headers['content-type'] = [{ key: 'Content-Type', value: 'image/jpg' }]
  response.headers['cache-control'] = [{ key: 'Cache-Control', value: 'public, max-age=31536000' }]
  callback(null, response)
})

如果已经生成了缩略图,我只需要:

if (!response.headers['cache-control']) {
  response.headers['cache-control'] = [{ key: 'Cache-Control', value: 'public, max-age=31536000' }]
}
callback(null, response)
    null
General
  Request URL: https://aws.mydomain.com/478/dd123cd5-1636-47d0-b756-e6c6e9cb28c0/normal/pic.jpg
  Request Method: GET
  Status Code: 200 
  Remote Address: 52.84.31.149:443
  Referrer Policy: no-referrer-when-downgrade
  age: 382

Response Headers
  content-length: 49192
  content-type: image/jpg
  date: Thu, 09 May 2019 20:41:42 GMT
  server: AmazonS3
  status: 200
  via: 1.1 261e801dca9c54ff576f39f96d80ede5.cloudfront.net (CloudFront)
  x-amz-cf-id: ZlheiBoNDuYDeuvZo0jBP6Zjpge5AonPGlCo_N2pHhHdGwV7DorKtA==
  x-amz-id-2: xkDxIB0qDJt5KMeHINq7/gaRII6EDBOsL3SlMuhMwJ84M/lak9E/tcRChv7vvYurD+2hYOT8kSI=
  x-amz-request-id: CAD9AE1E905BB13A
  x-cache: Hit from cloudfront

Request Headers
  :authority: aws.mydomain.com
  :method: GET
  :path: /478/dd123cd5-1636-47d0-b756-e6c6e9cb28c0/normal/pic.jpg
  :scheme: https
  accept: */*
  accept-encoding: gzip, deflate, br
  accept-language: en-US,en;q=0.9
  user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36

控制缓存不存在,我想不出来...

当我使发行版中的所有映像无效时,唯一的变化是X-cache的值:第一次加载时的'error from cloudfront'(状态为200,映像加载正常)

共有1个答案

方夜洛
2023-03-14

好的,所以显然不可能在origin-response lambda中添加cache-control头。您必须在查看器响应lambda中完成此操作。大概是这样的:

exports.handler = (event, context, callback) => {
  const response = event.Records[0].cf.response;
  if (!response.headers['cache-control']) {
    response.headers['cache-control'] = [{
      key: 'Cache-Control',
      value: 'max-age=31536000'
    }];
  }
  callback(null, response);
};
 类似资料:
  • 我有一个问题与超文本传输协议头-缓存控制:max-age=1234我的源有那个头,但任何方式发送请求和接收304.我需要可能我错过了什么?还有一个,源除了缓存控制: max-age=1234在"响应头"有缓存控制: max-age=0在"请求头",可能是它的影响。 我的一个资源响应标题,示例: > 远程地址:10.6.237.13:443请求请求方式:GET状态码:304未修改

  • 我们已经配置nginx服务器添加缓存控制头到公共和到期时间到1个月。但是当我们从浏览器发出请求时,客户端正在添加缓存控制:无缓存头。正因为如此,它每次都是新鲜下载内容,而不是提供缓存版本。 我怎样才能缓存静态文件? 如果我从终端触发请求,服务器添加的缓存控制标头在响应标头中可见。

  • 在nginx中使用add_header指令时,会将该头添加到来自源服务器的响应中。 假设源服务器返回缓存控制公共,最大年龄=60。但在nginx反向代理位置中,您可以设置如下内容: 添加\u头缓存控制公用,最大年龄=10 这到底是做什么的?我可以想到两种不同的情况: 1)Nginx尊重来自源服务器的缓存控制报头,并将内容存储在其缓存中,过期时间为60秒。然后传递带有覆盖标头的响应,导致客户端将资源

  • 使用 rax-plugin-pwa 插件,可以方便快捷的使用 Service Worker 控制缓存,以获得更快的加载速度。 首先,安装 build-plugin-rax-pwa 插件依赖: $ npm install build-plugin-rax-pwa --save 在工程配置 build.json 中添加 pwa 插件并配置缓存目标: { "plugins": [ [

  • 我想在缓存控制头中设置max age以响应。我已经写了如下,但仍然有max-age 0。我想只为一种方法设置max age,所以我不想禁用默认值。我认为应该是ovveride。 有人知道我做错了什么吗?