본문 바로가기

웹 프로그래밍/HTTP

HTTP 헤더(2)

캐시

-캐시가 없을때: 데이터가 변경되지 않아도 네트워크를 통해 데이터를 다운 받아야함

-캐시 적용: 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지않고 캐시 저장소에서 바로 꺼낼수 있음

 

검증 헤더(서버: last-modified)와 조건부 요청(클라이언트: If-modified-since)

 

-캐시 유효시간 초과시

    -1.서버에서 기존 데이터를 변경함

    -2.기존데이터와 똑같음

 

-캐시 만료후 기존 데이터를 변경하지 않음

    -클라이언트의 데이터와 서버의 데이터가 같다는 사실만 알면 재새용 가능 -> 검증헤더 추가

    -304 Not Modified + 헤더 메타 정보만 응답(바디 X)

    -클라이언트는 캐시의 메타정보를 갱신하고 캐시에 저장되어 있는 데이터 재활용(작은 헤더 정보만 다운로드)

 

-검증헤더:캐시 데이터와 서버 데이터가 같은지 검증

    -Last-Modified, ETag

 

-조건부 요청 헤더

    -조건에 따른 분기

    -If-Modified-Since(요청): Last-Modified(응답), If-None-Match(요청): ETag(응답) 끼리 사용

    -조건이 만족 200 OK, 만족하지 않으면 304 Not Modified

 

-If-Modified-Since: Last-Modified의 단점

    -최종 수정된 데이터는 똑같은데 업데이트는 된 상황(새로고침)

    -서버에서 별도의 캐시 로직을 관리하고 싶은 경우(주석처럼 영향이 없는 변경에서는 캐시를 유지)

 

-개선: ETag, If-None_Match 사용

    -캐시용 데이터에 임의의 고유한 버전 이름을 달아둠

    -ETag만 보내서 같으면 유지, 다르면 다시받기(해시값)

    -캐시 제어로직을 서버에서 완전히 관리(클라이언트는 매커니즘 모름)

 

캐시와 조건부 요청 헤더

-Cache-Control: 캐시 제어

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

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

 

-Cache-Control: 캐시 제어(캐시 지시어(directives))

     -Cache-Control: max-age

        -캐시 유효 시간, 초단위

    -Cache-Control: no-cache

        -데이터는 캐시해도 되지만, 항상 원(ORIGIN) 서버에 검증하고 사용(조건부 요청)

    -Cache-Control: no-store

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

    -Cache-Control: must-revalidate

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

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

 

프록시 캐시(중간에 경유하는 캐시 서버)

-Cache-Control: public (응답이 public 캐시에 저장되어도 됨)

-Cache-Control: private (응답이 해당 사용자(private)만을 위한것임)

 

캐시 무효화: 확실한 캐시 무효화 응답(캐시 쓰지마)

-Cache-Control: no-cache, no-store, must-revalidate + Pragma: no-cache(HTTP 1.0 버전일수도 있기에) 

'웹 프로그래밍 > HTTP' 카테고리의 다른 글

HTTP 헤더(1)  (0) 2023.02.26
HTTP 상태코드  (0) 2023.02.24
HTTP 메서드 활용  (0) 2023.02.24
HTTP 메서드  (0) 2023.02.22
HTTP  (0) 2023.02.22