관리 메뉴

개발하는 동그리

[네트워크] HTTP 헤더 2 본문

IT 정보/Spring

[네트워크] HTTP 헤더 2

개발하는 동그리 2022. 6. 7. 17:00
반응형

캐시 적용 전

  • 인터넷 네트워크는 느리고 비싸다
  • 브라우저의 로딩 속도가 느리다
  • 계속 네트워크를 통해 데이터를 다운로드하여야 한다. 

 

캐시 적용 후 (캐시가능 시간 내)

  • 캐시를 사용하면 캐시 가능시간동안 네트워크 사용하지 않아도 된다.
  • 비싼 네트워크 사용량 줄일 수 있다. 
  • 브라우저 로딩속도가 빠르다. 

 

캐시 적용 후 (캐시가능 시간 초과)

  • 캐시 적용전과 마찬가지다. 
  • 기존 캐시기록 초기화 
  • 만약!! 캐시데이터가 변하지 않았다면, 검증 헤더를 사용하면 된다. 

조건부 요청 헤더

  • 검증 헤더 조건에 따른 분기
  • If-Modified-Since : Last-Modified 사용
  • If-None-Match: ETag 사용
  • 조건이 만족하면 200 OK 
  • 조건이 만족하지 않으면 304 Not Modified

 

검증 헤더 

  • 캐시데이터와 서버 데이터가 같은지 검증하는 데이터
  • Last-Modified, ETag 

 

Last-Modified & If-Modified-Since

: 캐시를 저장해서 반복해서 데이터를 불러올 때 데이터 부담 없이 재사용

  1. 클라이언트가 서버에 요청
  2. 서버에서 Last-Modified : 2022년 06월 07일 12:00:00 (최종 수정일) 포함해서 응답
  3. 클라이언트는 브라우저 캐시에 (최종 수정일) 저장
  4. 추후에 다시 요청시 캐시 확인 후 있으면  HTTP 요청 헤더(if-modified-since)를 추가하여 서버 요청 
  5. 서버에서 매치가 되면 304 Not Modified를 보내고 body 없이 응답  / 매치 안되면 2~3번으로 go
  6. 웹 브라우저는 브라우저 캐시에서 꺼내서 사용!

 

ETag (Entity Tag) & If-None-Match

: 서버에서 임의의 고유한 버전 이름을 달아둠

  • 데이터가 변경되면 다른 Hash 값 생성! (Hash로 관리)
  • 단순하게 ETag만 보내서 같으면 유지하고 다르면 다시 받기.
  • 캐시 제어 로직을 서버에서 완전히 관리 ( 클라이언트는 전혀 모름 )
  1. 클라이언트가 서버에 요청
  2. 서버에서 ETag 포함해서 응답
  3. 클라이언트는 브라우저 캐시에 ETag 저장
  4. 추후에 다시 요청시 ( ETag 유무 체크 후 있으면 ) ex). If-None-Match 값을 함께 보냄
  5. 서버에서 매치가 되면 304 Not Modified를 보내고 body 없이 응답  / 매치 안되면 2번으로 go
  6. 웹 브라우저는 브라우저 캐시에서 꺼내서 사용!

 

캐시 제어 헤더

  • Cache-Control : 캐시 제어 ⭐⭐⭐⭐
    • Cache-Control: max-age : 캐시 유효 시간
    • Cache-Control: no-cache : 데이터는 캐시해도 되지만, 항상 (orgin) 서버에 검증하고 사용
    • Cache-Control: no-store : 데이터에 민감하므로 저장하면 안됨 (최대한 빨리 제거)
       
    • Cache-Control: public : public cache에 저장되도 되는 것 (프록시 캐시) 
    • Cache-Control: private : 사용자만을 위한 캐시 (default)
    • Cache-Control: s-maxage : 프록시 캐시에만 적용되는 max-age

    • Cache-Control: no-cache :
      •  프록시 캐시가 원서버에 접근을 못할 시 프록시 캐시가 설정에 따라 이전 캐시값을 응답할 수도 있다.
    • Cache-Control: no-store
    • Cache-Control: must-revalidate :
      • 캐시 만료후 최초 조회시 원 서버에 검증해야함
      • no-cache와 다르게 원서버에 접근할 수 없는경우에 항상 오류가 발생해야한다. (504 Gateway Timeout)
    •  Pragma: no-cache 
      • HTTP 1.0 하위 호환
  • Pragma : 케시 제어 (하위 호환) : 현재 잘 사용하지 않음
  • Expires : 캐시 유효 기간 (하위 호환) : 캐시 만료일을 날짜로 사용하고, Cache-Control : max-age를 권장한다. 

 

반응형

'IT 정보 > Spring' 카테고리의 다른 글

[Spring] FrameWork  (36) 2022.06.15
[네트워크] HTTP 메서드  (44) 2022.06.08
[네트워크] HTTP 헤더  (12) 2022.06.07
[네트워크] HTTP 상태 코드  (13) 2022.06.07
[네트워크] SPA(Single Page Application) : AJAX  (8) 2022.06.05