BackEnd 학습/인터넷

HTTP 헤더 - 캐시와 조건부 요청/호스팅

잉아당 2022. 11. 1. 22:00
728x90

- 캐시가 없을 때

데이터가 변경되지 않아도 계속 데이터를 다운로드 받아야 함

로딩 속도가 느림

 

- 캐시 적용

cache-control : 캐시가 유효한 시간(초), 헤더에 적용

60초 지정하면 60초간 캐시 저장소에 저장되고 그 기간안에 새로고침 하여도 캐시 저장소에서 해당 데이터를 꺼내서 사용함

로딩 속도가 매우빠르며 캐시 가능 시간동안 네트워크를 사용하지 않아도 됨

 

캐시가 시간초과가 되면 다시 다운로드 받아 갱신 시켜주어야 함

1) 서버에서 기존 데이터 변경한 경우 

If-Modified-Since와 매칭 되지 않으므로 200이 오며 새로 데이터를 전송 함

 

2) 서버에서 기존 데이터를 변경하지 않는 경우

데이터가 동일하다는 검증이 필요 

=> 검증헤더 추가

Last-Modified : 데이터가 마지막에 수정된 시간 , 헤더에 적용

시간 만료 후 요청 시 캐시가 가지고 있는 데이터 최종 수정일을 보내 데이터가 동일하다는 것을 검증

변경되지 않으면 304를 보내고 http-body를 보내지 않음

응답헤더 정보만으로 캐시의 메타 정보를 갱신하여 재사용함

 

- Last-Modified, If-Modified-Since 단점

1초 미만 단위로 캐시 조정 불가능

날짜 기반의 로직 사용

데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 같은 경우 

ex)a -> b -> a 로 수정하여 날짜가 다르지만 데이터가 동일

 

- ETag(Entity Tag), If-None-Match

캐시용 데이터에 임의의 고유한 버전 이름을 달아두고 데이터가 변경 될 시 이 이름을 변경함

ETag만 보내서 같으면 유지 다르면 다시 받음

캐시 제어 로직을 서버에서 완전히 관리

 

- 캐시와 관련된 헤더

<캐시제어> 

Cache-Control : max-age

캐시 유효시간, 초단위

Cache-Control : no-cache

데이터는 캐시해도 되지만 항상 origin 서버에 검증하고 사용

Cache-Control : no-store

데이터에 민감한 정보가 있으므로 저장하면 안됨

Cache-Control : public

응답이 Public 캐시에 저장되어도 됨

Cache-Control : private

응답이 해당 사용자만을 위한것 (default)

Cache-Control : s-maxage

프록시 캐시에만 적용 되는 max-age

Cache-Control : must-revalidate

캐시 만료후 최초 조회시 origin 서버에 검증해야함

origint서버에 접근 불가할 경우 오류 보다 오래된 데이터라도 보여주기 때문에 사용

 

Pragma  : 캐시제어(하위호환)

 

Expires : 캐시 유효 기간(하위 호환)

정확한 날짜로 지정하여 사용

max-age 권장

 

- 프록시 캐시

중간에 프록시 서버를 놔두고 웹서버는 프록시 캐시 서버를 통하고 프록시 캐시 서버는 origin 서버를 통함 

=> 프록시 캐시 서버를 통하기 때문에 빠름

=> 최초 요청시에는 처음 프록시 캐시 서버가 origin 서버에서 데이터를 들고오기 때문에 느림 

=> 프록시 캐시 서버는 Public캐시, 요청 서버에는 Private 캐시

 

- 캐시 무효화

확실한 캐시 무효화 응답

임의로 브라우저가 캐시작업을 하기 때문에 확실하게 하기 위해 다음과 같은 헤더를 추가해야 함

#Cache-Control : no-cache, no-store, must-revalidate

#Pragma: no-cache

 

- 호스팅

서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스

웹 호스팅 : 개별 홈페이지를 운영하는 사용자를 위해 서버 컴퓨터의 일부 공간을 임대해주는 서비스, 서버의 자원을 과도하게 사용할 경우 다른 사용자를 위해 조치를 취함

 

 

 

'BackEnd 학습 > 인터넷' 카테고리의 다른 글

HTTP 헤더 - 일반 헤더  (0) 2022.10.17
HTTP 상태 코드  (0) 2022.10.11
HTTP활용  (0) 2022.09.29
HTTP 메서드  (0) 2022.09.25
HTTP  (0) 2022.09.18