웹 사이트와 애플리케이션의 성능은 이전에 가져온 리소스들을 재사용함으써 현저하게 향상될 수 있습니다. 웹 캐시는 레이턴시와 네트워크 트래픽을 줄여줌으로써 리소스를 보여주는 데에 필요한 시간을 줄여줍니다.
캐싱은 주어진 리소스의 복사본을 저장하고 있다가 요청 시에 그것을 제공하는 기술입니다.
캐싱 동작의 대상
HTTP 캐싱 캐시들을 인반적으로 GET에 대한 응답만을 캐싱합니다. 기본 캐시 키는 요청 메서드 그리고 대상 URI로 구성됩니다. (GET 요청만을 대상으로 하므로 URI만 사용되는 경우가 많습니다.)
캐싱 제어
Cache-control
해더
Cache-Control
HTTP/1.1 기본 해더 필드는 요청과 응답 양측 모두에 있어 캐싱 매커니즘을 위한 디렉티브를 지정하는데 사용됩니다.
캐시하지 않음
캐시는 클래이언트 요청 혹은 서버 응답에 관해서 어떤 것도 저장해서는 안됩니다. 요청은 서버측으로 전송되고 전체 응답은 매번 다운로드됩니다.
Cache-Control: no-store
캐시하지만 재검증
캐시된 복사본을 사용자에게 릴리즈 하기 전에, 유효성 확인을 위해 원 서버로 요청을 보냅니다.
Cache-Control: no-cache
사설 캐시와 공개 캐시
public 디렉티브는 응답이 어떤 캐시에 의해서든 캐시되어도 좋다는 것을 가리킵니다.
Cache-Control: public
private는 응답이 단일 사용자만을 위한 것이며 공유 캐시에 의해 저장되어서는 안된다는 것을 가리킵니다.
Cache-Control: private
만료
리소스가 유효하다고 판단되는 최대 시간을 표시합니다.
Cache-Control: max-age=31536000
검증
오래된 리소스는 사용하기 전에 그 상태를 확인하고 만료된 리소스는 사용하지 않습니다.
Cache-Controll: must-revalidate
Pragma
헤더
Pragma
는 HTTP/1.0 헤더 입니다. Pragma: no-cache
는 캐시가 검증을 위해 원래 서버에 요청을 보내도록 강제한다는 점에서 Cache-Control: no-cache와 유사합니다. 그러나 Pragma는 HTTP 응답에 대해 명세되지 않았으므로 일반적인 HTTP/1.1 Cache-Control 헤더를 신뢰성 있게 대체할 수 없습니다.