[딥다이브] 조건부 요청 헤더

mj·2024년 11월 6일
0

kbt

목록 보기
1/4
post-thumbnail

💡 딥다이브 주제 : 조건부 요청 헤더에 대해 나열하고 한 줄로 정의해보세요.



조건부 요청 헤더

정의

  • 캐시 동작 과정에서 쓰임.
  • 클라이언트가 서버로 요청을 보낼 때, 특정 조건이 충족되면 요청을 처리하도록 하는 헤더.

종류

  • If-Modified-Since ,  If-UnModified-Since : 검증헤더로 Last-Modified 값 사용
  • If-None-Match , If-Match : 검증헤더로 ETag 값 사용



⚙️ If-Modified-Since


실생활 예시 (교재참조)

  • 상황: 사용자 B가 인스타그램에서 최근 게시된 사진들을 확인하려고 합니다.
  • 문제: 사용자 B가 이미 한 번 본 사진들을 다시 로드할 때, 사진이 업데이트되지 않았다면 네트워크 자원을 낭비하는 상황이 발생할 수 있습니다.
  • 목적: "If-Modified-Since" 헤더를 사용하여, 서버에서는 해당 사진이 사용자가 마지막으로 확인한 이후 변경되었는지를 검사합니다. 이를 통해 불필요한 데이터 전송을 방지하고, 네트워크 효율성을 높입니다.

동작 방법

정리

  • 리소스가 마지막 수정 이후 변경되었을 때만 최신 데이터를 전송하도록 서버에 요구하는 헤더.
  • 전달된 If-Modified-Since 헤더값과 로제 인스타그램 페이지의 마지막 수정 시간을 비교한다.
    - 리소스가 수정된 경우 : 200 OK + 최신 인스타그램 페이지
    - 리소스 수정안된 경우 : 304 Not Modified (데이터는 보내지 않음.)



⚙️ If-UnModified-Since


실생활 예시

  • 상황: 사용자A와 B가 동시에 같은 문서를 편집하는중.
  • 문제: 사용자A가 먼저 문서를 수정 완료. 사용자B는 사용자A가 수정했음을 알지 못하고 서버에게 수정요청을 하면 B가 A의 내용을 덮어쓰는 문제가 발생.
  • 목적: 데이터의 무결성을 보장하고, 두 변경 중 하나만을 수행하도록 한다.

동작 방법

정리

  • 클라이언트가 서버에 요청을 보낼 때, 특정 날짜 이후로 리소스가 수정되지 않았을 경우에만 요청을 처리하도록 서버에 요구하는 헤더.
  • 목적 : 리소스 수정 시 충돌 방지, 특정 시점 이후로 리소스 변경되지 않도록 할때 사용
  • 서버에서 전달받은 If-Unmodified-Since 값과 리소스(문서)의 마지막 수정 시간을 비교한다.
    - 리소스가 수정된 경우 : 412 Precondition Failed 상태코드 반환 → 수정할 수 없음을 알림.
    - 리소스 수정안된 경우 : 200 OK 상태코드 반환 + 문서 수정



If-Modified-SinceIf-UnModified-Since의 단점

  • 검증헤더로 날짜,시간 기반의 Last-Modified 헤더를 사용
  • 1초 미만 단위로는 캐시조정 불가능
  • 날짜 기반의 로직 사용
  • 데이터를 수정해서 날짜는 다르지만, 데이터값은 변하지 않은경우에도 다시 한번 데이터를 받아와야 하므로 비효율적.
  • 주석처럼 크게 영향이 없는 변경에서는 캐시를 유지하고 싶은 경우



Last-Modified

  • 리소스가 마지막으로 수정된 시간을 나타내는 헤더
  • Tue, 07 Nov 2024 10:00:00 GMT 타임스탬프 형식으로 나타냄.

ETag

  • 리소스의 고유 식별자나 버전을 나타내는 값
  • v2 , e2fc714dd94 … 해시값 또는 버전 형태로 나타냄.



⚙️ If-None-Match


  • 서버의 리소스가 주어진 ETag와 일치하지 않을 경우에만 요청을 처리하도록 하는 헤더.
  • If-Modified-Since 와 목적은 같으나 검증헤더로 Last-Modified 가 아닌 ETag 를 쓴다는 점에서 다름.

동작 방법

  • ETag가 일치하면 : 서버는 304 Not Modified 상태코드 반환
  • ETag가 일치하지 않으면 : 200 OK + 서버는 변경된 새로운 리소스를 반환



⚙️ If-Match


  • 클라이언트가 제공한 ETag와 서버의 ETag가 일치할 경우메나 요청을 처리하도록 하는 헤더.
  • If-UnModified-Since 와 목적은 같으나 검증헤더로 Last-Modified 가 아닌 ETag 를 쓴다는 점에서 다름.

동작 방법

  • ETag가 일치하면 : 리소스를 수정하고 200 OK 응답 반환
  • ETag가 일치하지 않으면 : 412 Precondition Failed 상태코드 반환, 클라이언트가 수정할 수 없도록 막음.



최종 정리


조건부 요청 헤더 : 클라이언트가 서버로 요청을 보낼 때, 특정 조건이 충족되면 요청을 처리하도록 하는 헤더.


공부한 내용을 정리한 글이라 틀린 부분이 있을 수 있습니다. 틀린 부분이 있다면 알려주시면 감사하겠습니다.

profile
일단 할 수 있는걸 하자.
post-custom-banner

0개의 댓글