Search code examples
amazon-web-servicesaws-lambdahttp-headershttpresponseaws-lambda-edge

AWS Lambda Edge - Detect that response comes from origin or not in viewer response function


Inside my lambda edge viewer response function I need to understand if the response comes from Cloudfront cache or Origin server -

enter image description here

I was thinking to pass the response header from origin response function however its' value stays in cache so on subsequent requests it's also returned.

Do you think it's possible to achieve such detection?


Solution

  • I was being able to got it working by checking the date header value with the date of execution in viewer response -

      const originWasAccessedAt = getHeader('date', response);
      const viewerResponseAccessedAt = new Date().toUTCString();
      const originTime = Date.parse(originWasAccessedAt);
      const viewerTime = Date.parse(viewerResponseAccessedAt);
      const allowedTimeRange = 1000 * 2; // use 2 seconds range for safety
      const maxOriginTime = originTime + allowedTimeRange;
      const originWasHit = viewerTime >= originTime && viewerTime <= maxOriginTime;
      const value = originWasHit ? 'CDN_CACHE_MISS' : 'CDN_CACHE_HIT';