CS/Network

검증 헤더와 조건부 요청1

oxdjww 2023. 10. 7. 13:34
728x90
반응형

Intro

본 포스팅에서는 검증 헤더와 조건부 요청에 대해 다룬다.

캐시 시간 초과

  • 캐시 유효 시간이 초과해서 서버에 다시 리소스를 요청하면 다음 두 가지 상황이 나타난다.

  1. 서버에서 기존 데이터를 변경하지 않은 경우
  2. 서버에서 기존 데이터를 변경한 경우

서버에서 데이터를 변경하지 않은 경우

그렇다면, 데이터를 전송해서 새로 받는 대신에 저장해 두었던 캐시를 재사용 할 수 있다.
단, 클라이언트의 데이터와 서버의 데이터가 같다는 사실을 확인할 수 있는 식별자가 필요할 것이다.

첫 번째 요청


첫 번째 요청을 받은 서버는 클라이언트에게 리소스를 보낸다.
이 때, Last-Modified라는 필드에 날짜 값을 넣어서 보내게 된다.

이 값을 통해 해당 리소스의 최종 수정일을 알 수 있다.

웹 브라우저는 수신한 리소스를 다시 캐시 저장소에 저장한다.

두 번째 요청


두 번째 요청시, 같은 리소스를 요청하였기 때문에 캐시 저장소에서 캐시를 찾았다.
하지만 캐시 유효 시간이 만료되었다.

이 때, 바로 서버에 데이터를 요청하는 것이 아니라 캐시 저장소에 있던 캐시가 갖고 있던 데이터 최종 수정일값을 담은 패킷을 서버에 전송하게 된다.

이 때 클라이언트는 if-modified-since라는 필드에 그 값을 넣어 전송한다.

패킷을 받은 서버는 해당 리소스의 데이터 최종 수정일 값을 비교한다.
그리고 데이터가 아직 수정되지 않았음을 확인하였다.

그리고 서버는 클라이언트에게 패킷을 전송하게 된다.
이 패킷은 바디가 없고, start-lineheader만 존재하는 패킷이다.
그러기에 기존에 1.1M였던 패킷이 아니라 0.1M만큼의 패킷을 전송한다.

start-linehttp status code를 보면 304 Modified라는 값을 확인할 수 있다.
그리고 Last-Modified 필드의 값을 보면 클라이언트에게 받은 값과 동일한 값을 돌려준다.

클라이언트는 서버로부터 받은 패킷을 통해 캐시 유효 시간이 만료되었음에도 캐시 값이 변겨여되지 않았고, 이를 재사용할 수 있음을 알게 된다.
그리고 같은 결과를 재사용하고 헤더 데이터 중 캐시 유효 시간을 다시 갱신한다.

그리고 최종적으로 캐시 저장소에서 값을 조회하여 두 번째 요청을 정상적으로 처리할 수 있다.

  • 캐시 유효 시간이 초과해도, 서버의 데이터가 갱신되지 않으면
  • 304 Not Modified + 헤더 메타 정보(start-line)만 응답(바디X)
  • 클라이언트는 서버가 보낸 응답 헤더 정보로 캐시의 메타 정보를 갱신한다.
  • 클라이언트는 캐시에 저장되어 있는 데이터 재활용 할 수 있다.
  • 결과적으로 네트워크 다운로드가 발생하지만 용량이 적은 헤더 정보만 다운로드한다.
  • 매우 실용적인 해결책


감사합니다.

Ref

모든 개발자를 위한 HTTP 웹 기본 지식, 인프런 김영한 강사님

728x90
반응형

'CS > Network' 카테고리의 다른 글

프록시 캐시와 캐시 무효화  (0) 2023.10.07
검증 헤더와 조건부 요청2  (0) 2023.10.07
캐시 기본 동작  (0) 2023.10.07
인증과 쿠키  (0) 2023.10.05
일반 정보, 특별한 정보  (0) 2023.10.04