네트워크
상태 코드 - 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
반응형