캐싱키 구성하기

HTTP에는 콘텐츠를 구분하는 다양한 옵션(=헤더)가 존재한다. 그만큼 캐싱키 도 다양하게 존재할 수 있다. 캐싱키 란 콘텐츠를 구분하는 고유 값으로 URL과 혼동되기 쉽다.

Note

기본 캐싱키는 대소문자를 구분하는 쿼리스트링을 포함하는 URL에 Accept-Encoding 헤더를 반영하는 정책이다.

HTTP의 여러 기능에 따라 같은 URL이라고 하더라도 콘텐츠가 달라질 수 있기 떄문에 효과적인 캐싱키 를 설정해야 캐시 히트율을 높일 수 있다. 이에 따라 원본서버 요청URL과 캐싱키가 다음과 같이 결정된다.

설정

클라이언트요청URL

원본요청URL=캐싱키

대소문자 구분 false

/Image/LOGO.png

/image/logo.png

대소문자 구분 true

/Image/LOGO.png

/Image/LOGO.png

QueryString 구분 false

/view/list.php?type=A

/view/list.php

QueryString 구분 true

/view/list.php?type=A

/view/list.php?type=A

wholeClientRequesttrue 으로 설정하면 다음과 같이 캐싱키와 상관없이 클라이언트가 보낸 URL을 그대로 원본에 보낸다.

설정

클라이언트=원본요청URL

캐싱키

대소문자 구분 false

/Image/LOGO.png

/image/logo.png

대소문자 구분 true

/Image/LOGO.png

/Image/LOGO.png

QueryString 구분 false

/view/list.php?type=A

/view/list.php

QueryString 구분 true

/view/list.php?type=A

/view/list.php?type=A

POST 요청을 캐싱하는 경우 원본서버로 요청할 때 클라이언트가 보낸 POST요청의 Body데이터가 수정없이 전송된다.

Accept-Encoding 헤더

같은 URL에 대한 HTTP요청이라도 Accept-Encoding 헤더의 존재 유무에 따라 다른 콘텐츠가 캐싱될 수 있다. 원본서버에 요청을 보내는 시점에 압축여부를 알 수 없다. 응답을 받았다고해도 압축여부를 매번 비교할 수도 없다.

../../../_images/acceptencoding.png

원본서버가 어떤 응답을 줄지 알 수 없다.

See also

대소문자 구분

원본서버의 대소문자 구분여부를 능동적으로 알 수 없다.

../../../_images/casesensitive.png

아마도 같은 콘텐츠이거나 404가 발생한다.

See also

QueryString 구분

QueryString에 의하여 동적으로 생성되는 콘텐츠가 아니라면 QueryString을 인식하는 것은 불필요하다. 아무 의미없는 Random값이나 항상 변하는 시간 값이 매번 붙는다면 원본에 엄청난 부하가 발생할 수 있다.

../../../_images/querystring.png

동적 콘텐츠가 아니라면 같은 콘텐츠일 가능성이 높다.

See also

POST Method 캐싱

POST 요청을 캐싱하도록 설정한다. POST 요청의 특성상 URL은 같지만 Body데이터가 다를 수 있다.

See also