본문 바로가기

HTTP

3월 13일 HTTP 캐시 무효화

캐시 무효화

 

cache-control

확실한 캐시 무효화 응답

-cache-contol : no-cache , no-store , must-revalidate

-progma : no-cache

HTTP/1.0 하위호환 (이것까지 넣어주어야 한다.)

 

캐시를 요청하지 안하도 HTTP가 알아서 요청하기도 한다.

캐시가 되어선 안될 데이터의 경우 위 (cache-contol : no-cache , no-store , must-revalidate , progma : no-cache) 헤드를 모두 넣어주어야 한다.

 

캐시 지시어(directives) - 확실한 캐시 무효화

(무조건 사용)

-cache-contol : no-cache

데이터는 캐시해도 되지만 항상 원서버에 검증하고 사용 (이름에 주의)

-cache-contol : no-store

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

(메모리에서 사용하고 최대한 빨리 삭제)

 

 

-cache-contol:must-revalidate

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

원서버 접근 실패시 반드시 오류가 발생해야함 , 504(gateway - timeout)

must-recalidate 는 캐시 유효 시간이라면 캐시를 사용함

-progma : no-cache

HTTP/1.0 하위 호환

(no-cache는 브라우저가 검증하지 않고 원서버에 바로 요청한다.)

 

Must-revalidate vs no cache

1.웹 브라우저가 프록시 서버에 요청 no-cache , ETag

2. 프록시 서버가 원서버에 요청 no-cache , ETag

3. 프록시 서버에서의 요청을 원서버에서 검증

4. 서버에서 프록시 서버로 304 not Modified 응답

5. 프록시서버에서 웹브라우저로 304 not Modified 응답

 

서버가 no-cache에 대하여 응답 해주면 웹브라우에서 캐시를 사용

 

no-cache 사용불가 경우

1.웹 브라우저가 프록시 서버에 요청 no-cache , ETag

2.프록시 서버 원서버에 접근할 수 없는 경우

캐시 서버 설정에 따라서 캐시 데이터를 반환할 수 있음

3.오류를 반환하기 보다는 오리진 데이터라도 보려주기

(설정에 따라 , 오류 , 200 반환값 설정 가능)

 

Must-revalidate의 경우 (응답 물가시 무조건 오류 반환)

1.웹 브라우저가 프록시 서버에 요청 no-cache , ETag

2. 프록시서버가 순간적으로 원서버와 단절

원서버에 접근할수 없는 경우 , 항상 오류가 발생해야한다.

504 GateWay Timeout

(매우 중요한 돈과 관련된 결과로 생각할경우 아무값도 반환하지 않는게 보안적이다.)