[캐시 관리] - 캐시 검증 헤더와 조건부 요청

Donggu(oo)·2023년 2월 1일
0

최적화(Optimization)

목록 보기
4/6

1. 캐시 검증 헤더와 조건부 요청 헤더


  • 캐시 유효 시간은 지났지만, 서버에서 다시 받아와야하는 파일이 캐시에 저장되어 있는 파일과 완전히 동일한 경우 이때도 똑같은 파일을 다시 받아와야하는 경우가 발생한다. 이럴 때 유효 시간이 지났다고 해서 굳이 똑같은 파일을 다시 받아오는 것은 비효율적일 것이다.

  • 똑같은 파일을 다시 받아오지 않고 서버의 파일과 캐시의 파일이 동일한지 확인해서 재사용하는 것이 더 효율적인데, 이런 상황에서 사용할 수 있는 HTTP 헤더들인 캐시 검증 헤더와 조건부 요청 헤더가 있다.

1) 캐시 검증 헤더

  • 캐시에 저장된 데이터와 서버의 데이터가 동일한지 확인하기 위한 정보를 담은 응답 헤더이다.

  • Last-Modified : 데이터가 마지막으로 수정된 시점을 의미하는 응답 헤더로, 조건부 요청 헤더인 If-Modified-Since 와 묶어서 사용한다.

  • Etag : 데이터의 버전을 의미하는 응답 헤더로, 조건부 요청 헤더인 If-None-Match 와 묶어서 사용한다.

2) 조건부 요청 헤더

  • 캐시의 데이터와 서버의 데이터가 동일하다면 재사용하게 해달라는 의미의 요청 헤더이다.

  • If-Modified-Since : 캐시된 리소스의 Last-Modified 값 이후에 서버 리소스가 수정되었는지 확인하고, 수정되지 않았다면 캐시된 리소스를 사용한다.

  • If-None-Match : 캐시된 리소스의 ETag 값과 현재 서버 리소스의 ETag 값이 같은지 확인하고, 같으면 캐시된 리소스를 사용한다.

2. 캐시 검증 헤더와 조건부 요청 헤더 사용법


  • 두 쌍의 캐시 검증 헤더와 조건부 요청 헤더 중 한 쌍만 사용할 수도 있지만, 보통 두 종류를 동시에 사용한다.

  • 왜냐하면 둘 중 하나만 사용했다가 매칭되는 응답 헤더가 없는 경우라도 재사용할 수 있는 경우에는 다시 리소스를 받아와야 하는 경우가 생길 수 있기 때문이다.

1) Last-Modified 와 If-Modified-Since

  • 첫 번째 요청을 보내고 응답을 받으면서 캐시 유효 시간이 60초인 이미지 파일을 같이 받아온다. 이 때, 서버의 파일이 마지막으로 수정된 시간을 의미하는 Last-Modified 헤더에 담긴 내용도 캐시에 함께 저장한다.

  • 캐시 유효 시간인 60초를 초과한 후에 두 번째 요청을 보낼 경우, 유효 시간이 지났어도 해당 데이터를 재사용해도 되는지 확인하기 위해 요청 헤더 If-Modified-Since 를 작성하고 캐시에 함께 저장해놓았던 Last-Modified 값을 담아 요청을 보낸다. 이 값을 이용해 서버 데이터의 최종 수정일과 캐시에 저장된 데이터의 수정일을 비교하여 두 데이터가 동일한 데이터라면 최종 수정일이 같아야 한다.

  • 서버와 캐시의 데이터가 동일한 데이터임이 검증되었다면 서버는 데이터가 수정되지 않았음을 의미하는 304 Not Modified라는 응답을 보내주고, 캐시 데이터의 유효 시간이 갱신되면서 해당 데이터를 재사용할 수 있게 된다.

2) Etag 와 If-None-Match

  • 첫 번째 요청을 보내고 응답을 받으면서 캐시 유효 시간이 60초인 이미지 파일을 같이 받아온다. 이 때, 서버의 파일 버전을 의미하는 Etag 헤더에 담긴 내용도 캐시에 함께 저장한다.

  • 캐시 유효 시간인 60초를 초과한 후에 두 번째 요청을 보낼 경우, 유효 시간이 지났어도 해당 데이터를 재사용해도 되는지 확인하기 위해 요청 헤더 If-None-Match 를 작성하고 캐시에 함께 저장해놓았던 Etag 값을 담아 요청을 보낸다. 이 값을 이용해 서버 데이터의 Etag와 캐시에 저장된 데이터의 Etag를 비교하여 두 데이터가 동일한 데이터라면 Etag값이 같아야 한다.

  • 서버와 캐시의 데이터가 동일한 데이터임이 검증되었다면 서버는 데이터가 수정되지 않았음을 의미하는 304 Not Modified라는 응답을 보내주고, 캐시 데이터의 유효 시간이 갱신되면서 해당 데이터를 재사용할 수 있게 된다.

0개의 댓글