Platform마다 응답이 다른 경우 CloudFront를 효율적으로 캐시 HIT시키는 방법
3695 단어 CloudFrontLambda@Edge
요구사항
이번 Platform마다 응답이 다르다는 것은, iPhone, Android, (PC)마다 어플리케이션 서버가 다른 응답 돌려주는 경우를 상정한다.
문제점
애플리케이션 서버 측에서 UA를 판정하여 응답을 생성하고 있기 때문에
CloudFront에서 준비되어 있는 아래의 플래그만으로는 판정이 어렵다.
CloudFront-Is-Desktop-Viewer
CloudFront-Is-Mobile-Viewer
CloudFront-Is-SmartTV-Viewer
CloudFront-Is-Tablet-Viewer
디바이스 유형에 따라 객체를 캐시하도록 CloudFront 설정
결론
1. Lambda@Edge를 사용하여 UA를 다시 씁니다.
'use strict';
exports.handler = (event, context, callback) => {
// Get request and request headers
const request = event.Records[0].cf.request;
const headers = request.headers;
if (headers['User-Agent']) {
headers['User-Agent'] = headers['User-Agent'][0].match(/(Android|iPhone)/)? RegExp.$1: 'Other';
}
callback(null, request);
}
2. CloudFront
Whitelist Headers
에 User-Agent
지정경고가 나오지만 무시. 참고
요약
경고에도 있지만, UA를 그대로 캐시하면 UA마다의 캐시가 되어 버려 캐시의 HIT 효율이 떨어지기 때문에, UA를 간략화시켜 효율적으로 Cloudfront를 활용할 수 있다.
다른 커스텀 헤더가 아니고, UA에 다시 채운 것은 어플리케이션 서버측의 코드를 변경시키고 싶지 않았기 때문.
Reference
이 문제에 관하여(Platform마다 응답이 다른 경우 CloudFront를 효율적으로 캐시 HIT시키는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ainn_lll/items/a31b87abdd2da14ae6a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)