프로그래밍/HTTP

HTTP 헤더2

Baesj 2021. 9. 1. 18:55

모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 간단하게 정리한 내용 및 추가로 알게 된 내용입니다.

 

캐시

    캐시들은 일반적으로 GET에 대한 응답만을 캐싱한다    

    캐시가 없으면 데이터가 변경되지 않아도 네트워크를 통해 데이터를 다운받아야 한다.

    비싼 네트워크 사용량을 줄일 수 있다.

    로딩 속도가 빨라진다.

 

    캐시 시간 초과

        캐시 유효시간이 초과하면, 서버를 통해서 캐시를 갱신한다.

    

    검증 헤더 추가    

        기존 데이터가 변경되거나 변경되지 않을 수 있음.

        변경되면 캐시를 갱신해야하지만 변경되지 않으면 기존 캐시를 재사용하는게 이득임.

        따라서 검증 헤더를 추가해 준다.

        요청 할 때 최종 수정한 시간을 보내서, 서버에서 최종 수정 시간을 체크하여 차이가 있으면 데이터를 보내고

        차이가 없으면 304 Not Modified와 헤더 메타정보만 응답한다.

 

    검증 헤더

        검증 헤더에는 Last-Modified, ETag가 있다.

        If-Modified-Since: Last-Modified 사용

            GET 또는 HEAD에만 쓸 수 있음

        If-None-Match: ETag 사용

    

        If-Modified-Since: Last-Modified 특징

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

           날짜 기반의 로직 사용

           같은 데이터지만 수정 날짜가 달라지면 다시 보내야하는 단점이 있음

 

       ETag 특징

            ETag(Entity Tag) 엔티티 태그

            임의의 고유한 버전 이름을 붙인다.

            데이터가 변경되면 이름을 변경한다.

 

    캐시 제어 헤더

        Cache-Control: 캐시 제어

        캐시 지시어(directives)

            Cache-Control: max-age

                캐시 유효 시간, 초 단위

            Cache-Control: no-cache

                데이터는 캐시해도 되지만, 유효성 확인을 위해 Origin 서버에 검증 요청을 하고 사용

            Cache-Control: no-store

                저장하면 안됨

 

        Pragma - 하위 호환 필요하면 사용

 

        Expires

            캐시 말료일 지정(하위 호환)

            max-age 사용을 권장

 

    프록시 캐시

        웹 브라우저(private 캐시) <-> 프록시 캐시 서버(public 캐시) <-> Origin 서버

        캐시 지시어

            Cache-Control: public

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

            Cache-Control: private

                응답이 해당 사용자만을 위한 것임, private 캐시에 저장해야 함(기본값)

 

    캐시 무효화

        웹 브라우저가 임의로 캐쉬하는 것을 막을 수 있다.

        캐시 지시어

            Cache-Control: no-cache

                데이터는 캐쉬해도 되지만, Origin 서버에 검증하고 사용

            Cache-Control: no-store

                저장하면 안됨(메모리에서 사용하고 최대한 빨리 삭제)

            Cache-Control: must-revalidate

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

                Origin 서버 접근 실패시 반드시 오류 발생 - 504(Gateway Timeout)

                    no-cache와 차이점은 no-cache는 Origin 서버 장애시 프록시에서 예전 데이터를 보내줄 수 있음

                캐시 유효 시간이라면 캐시를 사용함

            Pragma: no-cache

                HTTP 1.0 하위 호환

 

참고

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/If-Modified-Since

https://developer.mozilla.org/ko/docs/Web/HTTP/Caching

 

추가적으로 가볼만한 사이트

https://feel5ny.github.io/2019/10/05/HTTP_007-2/

https://developer.mozilla.org/ko/docs/Web