twocowsong

[모든 개발자를 위한 HTTP 웹 기본 지식 - 31] 본문

IT/HTTP

[모든 개발자를 위한 HTTP 웹 기본 지식 - 31]

WsCode 2022. 1. 30. 18:56

검증 헤더와 조건부 요청2

• 검증 헤더

• 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터

• Last-Modified , ETag

 

• 조건부 요청 헤더

• 검증 헤더로 조건에 따른 분기

• If-Modified-Since: Last-Modified 사용

• If-None-Match: ETag 사용

• 조건이 만족하면 200 OK ( 새로 다운 )

• 조건이 만족하지 않으면 304 Not Modified (브라우저 캐쉬에 이미지와 서버에이미지가 같은경우)

 

 

If-Modified-Since: 이후에 데이터가 수정되었으면?

  데이터 미변경 예시 (다운로드 하지않음)

  • 캐시: 2020년 11월 10일 10:00:00 vs 서버: 2020년 11월 10일 10:00:00

  • 304 Not Modified, 헤더 데이터만 전송(BODY 미포함)

  • 전송 용량 0.1M (헤더 0.1M, 바디 1.0M)

 

  데이터 변경 예시 (새롭게 다운로드 함)

  • 캐시: 2020년 11월 10일 10:00:00 vs 서버: 2020년 11월 10일 11:00:00

  • 200 OK, 모든 데이터 전송(BODY 포함)

  • 전송 용량 1.1M (헤더 0.1M, 바디 1.0M)

 

 

검증 헤더와 조건부 요청

Last-Modified, If-Modified-Since 단점

• 1초 미만(0.x초) 단위로 캐시 조정이 불가능

• 날짜 기반의 로직 사용

• 데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 똑같은 경우

• 서버에서 별도의 캐시 로직을 관리하고 싶은 경우

  • 예) 스페이스나 주석처럼 크게 영향이 없는 변경에서 캐시를 유지하고 싶은 경우

 

검증 헤더와 조건부 요청

• ETag(Entity Tag)

• 캐시용 데이터에 임의의 고유한 버전 이름을 달아둠

• 예) ETag: "v1.0", ETag: "a2jiodwjekjl3"

• 데이터가 변경되면 이 이름을 바꾸어서 변경함(Hash를 다시 생성)

• 예) ETag: "aaaaa" -> ETag: "bbbbb"

• 진짜 단순하게 ETag만 보내서 같으면 유지, 다르면 다시 받기! ETag, If-None-Match

 

ETag 사용시 이미지를 다운로드 받을때 헤더에 ETag가 추가됩니다.

 

클라이언트는 ETag를 같이 보냄으로 서버에서 이미지 변경하였는지 여부를 확인합니다.