본문 바로가기
Web

304 Not Modified 이해하기

by Vintz 2021. 9. 9.
반응형

HTTP 상태코드를 공부하던 중, 내 포트폴리오 사이트의 상태코드를 확인해보니 304가 뜨는 것을 확인했다. 왜 200번대의 성공 상태코드가 아닌 300번대의 리다이렉션 상태코드가 뜬 것일까?

왜 200번대가 아닌거죠?!

304 not modified란 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐시*된 자원을 사용하도록 권하는 상태코드다. 간단히 말하면 서버에서 요청된 자원을 재전송할 필요가 없음을 나타내는 것이다. 클라이언트가 캐시된 자원을 사용하게 하게 되면 연결을 통해 다시 전체 자원을 전송하는 것보다 효율적이다.

자원이 변경되지 않았으니 자원을 다시 보내지 않고 304 not modified를 보낼게 - MDN

💡 HTTP는 성공(200번대)인 경우라도 요청의 결과가 변경될 수 있는 조건부 요청(conditional requests)을 갖고 있다. 이런 요청으로 캐시의 내용과 쓸데없는 제어를 검증 및 제한하고 다운로드를 이어서 하거나 서버에 문서를 업로드 하거나 수정할 때 문서의 무결성을 확인하는 데 유용하다. 참고로, 대부분의 브라우저는 이 요청을 사용하여 자동 캐시 기능을 지원한다.

결국 우리 브라우저는

  1. 요청하는 자원이 이미 캐시되어 있어 캐시한 자원을 보내줄게.
  2. 서버야 이 자원이 변경 되었는지 확인 해줄래? (조건부 요청)
  3. 서버 : 자원을 성공적으로 받았어! 확인 해볼게.
  4. 서버 : 자원이 변경되지 않았어. 캐시된 자원을 사용해. (304 not modified)

이렇게 혼자 알아서 잘 해주고 있었는데 나 혼자 의문을 품고 있었던 것이었다. 😅

캐시 비우기 및 강력 새로고침 후 확인해보면 200 상태코드를 보여준다.
의심해서 미안해~

브라우저 캐시* - 가장 최근에 다운로드된 웹 페이지(문서)들을 저장하는 디스크나 메모리의 임시 저장 구역. 웹에서 페이지를 링크할 때 이 페이지를 메모리에 캐시하면 한 페이지로 돌아갈 때마다 그 페이지를 웹에서 다시 다운로드하지 않아도 된다. - 네이버 지식백과
반응형