네트워크

상태 코드 - 304 Not Modified

Royal! 2025. 5. 27. 11:21
728x90
반응형

리다이렉션 코드 종류

  • 리다이렉션 상태 코드 중 몇몇은 리소스에 대한 애플리케이션의 로컬 복사본이 원래 서버와 비교했을 때 유효한지 확인하기 위해 사용됨
  • 300(Multiple Choices) : 클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청한 경우, 그 리소스의 목록과 함께 반환
  • 301(Moved Permanetly) : 요청한 URL이 옮겨졌을 때 사용. 응답은 Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야 함
  • 302(Found) :  301 상태코드 같음. 클라이언트는 Location 헤더로 주어진 URL 리소스를 임시로 가리키기 위한 목적으로 사용
  • 304(Not Modified) : 요청한 리소스가 이전과 비교했을 때 변경되지 않았음을 의미 

304 코드 의미

  • 요청한 리소스가 이전과 비교했을 때 변경되지 않았음을 의미
  • 캐싱 최적화를 위한 코드
  • If-Modified-Since, If-None-Match 를 사용
  • 클라이언트에 응답을 보낼 때 Body를 전달하지 않음
    • 이유는 클라이언트는 이미 가지고 있는 데이터를 재사용하기 때문

If-Modified-Since 의미

  • 특정 날짜이후에 변경된 리소스가 있는 확인하기 위한 헤더
  • 클라이언트 요청
GET /style.css HTTP/1.1
If-Modified-Since: Tue, 21 May 2024 10:00:00 GMT

 

  • 서버 응답
HTTP/1.1 304 Not Modified
  • 위와 같이 변경된 것이 없으면 본문(Content-Length)가 없으며, 클라이언트는 자신의 캐시된 리소스를 사용

If-None-Match 의미

  • ETag를 이용해서 리로스 변경 여부를 판단하는 헤더
    • ETag는 Entity Tag의 줄임말로 리소스의 고유 식별자를 뜻 함
ETag: "abc123xyz"
  • 클라이언트는 이전에 받은 리소스의 ETag값을 저장 후 다음 요청 시 If-None-Match값을 담아 보내고 서버는 ETag가 동일한지 비교한 후 변경 여부를 판단
  • 클라이언트 ETag 요청
GET /image.png HTTP/1.1
Host: example.com
If-None-Match: "abc123xyz"
  • 서버 응답
HTTP/1.1 304 Not Modified
  • 본문은 없으며, 클라이언트는 캐시된 리소스(여기서는 이미지)를 재사용함

If-Modfied-Since vs If-None-Match

기준 마지막 수정 시간 (Last-Modified) ETag (고유 식별자)
정확도 시간 단위 (초)라서 다소 부정확할 수 있음 바이트 단위로 변경 감지 가능
장점 구현이 간단함 정밀한 변경 감지
우선순위 HTTP/1.1에서는 If-None-Match가 우선시됨 If-Modified-Since보다 우선

어떤 것 헤더를 더 많이 사용하는가?

  • 보통은 둘 중 하나만 사용
  • 둘 다 있을 경우 If-None-Match가 더 정확하기에 우선시 됨
728x90
반응형