캐시
: 한번 전송받은 데이터를 브라우저에 받아놓고 똑같은 요청이 있을 시 받아놓은 데이터를 사용하는 것



캐시사용의 장점
- 캐시가 남아있다면 서버에 취득하러 가지 않아도 됨으로 메모리낭비가 발생하지 않는다
- 네트워크통신을 하지 않아도 됨으로 로딩속도가 빠르다
캐시시간초과
- 서버에서 기존 데이터변경 o
서버에서 데이터를 다시 받아오며 캐시유효시간도 다시 갱신한다 - 서버에서 기존 데이터 변경 x
- 데이터가 변하지 않았으면 궂이 데이터를 가져올 필요가 없기 때문에 브라우저캐시에 있는 데이터를 사용하면 된다
클라이언트와 서버의 데이터가 변하지 않았다는것을 검증하기위해 검증헤더 라는 것을 사용한다


서버에서 응답시 Last-Modified최종 수정일을 같이 넣어서 응답해준다

응답받은 데이터를 브라우저는 브라우저캐시에 Last-Modified정보를 저장한다

브라우저에서 캐시를 사용하려 할 때 캐시 보존기간이 지났으면 서버에게 Last-Modifed정보를 if-modified-since에 넣어서 서버에 전송한다

서버에서는 클라이언트한테 받은 If-modified-since날짜와 비교해서 같은지를 비교한다


날짜가 같다면 서버는 304(Not Modified)와 함께 해더정보를 보내는데 실제 요청받은 데이터는 비워두고 전송한다
(실제 바디의 데이터는 보내지 않기 때문에 데이터량감소로 이어진다)

클라이언트는 브라우저캐시의 유효시간을 다시 갱신하여 저장하고 브라우저는 캐시에서 정보를 꺼내 사용한다
Last-Modified단점
: 스페이스나 주석같이 실제 데이터가 변하지 않았지만 수정이 되었을 때 데이터에 영향이없어도 수정날짜를 비교해서 데이터를
취득하기 때문에 낭비가 되는 문제가 있다 이러한 문제를 해결하기 위해서 ETag라는 것을 사용한다
ETag
: 서버에서 클라이언트로 응답시 Last-modified대신 ETag를 내려준다, 클라이언트도 Last-modified대신 ETag를 캐시에 저장
서버에서 실제 데이터가 변경되었을 때 ETag값을 임의로 변경하게 되면 클라이언트 캐시의 ETag와 비교한다






'it > httpCommunication' 카테고리의 다른 글
HTTP(캐시무효화) (0) | 2022.07.06 |
---|---|
HTTP(상태코드) (0) | 2022.07.05 |
HTTP(데이터전송) (0) | 2022.07.05 |
HTTP(메서드) (0) | 2022.07.05 |
HTTP(Stateful, Stateless) (0) | 2022.06.30 |