HTTP 캐싱에 대해서 설명해주세요 #67
Replies: 26 comments
-
클라이언트와 서버사이의 통신에 비용이 발생한다고 했는데 왜 비용이 발생하는건가요? |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
http 통신할떄 있는 method에 대하여 설명해주세요 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
HTTP 캐싱
문제 해결
클라이언트와 서버 사이에서 데이터를 주고 받는 과정에서는 비용이 발생한다. 많은 왕복작업에서 크기가 큰 응답들은 브라우저의 작업 지연과 서버의 부하를 발생시킨다.
웹 캐시가 저장소 내에 요청된 리소스를 복사해서 가지고 있으면, 요청을 가로채서 서버로부터 리소스를 다시 다운로드하는 대신에 복사본을 반환한다.
캐싱을 사용함으로써 사용자는 더 빠르게 HTTP 리소스를 로드할 수 있고, 개발자는 트래픽 비용을 절감할 수 있다.
적용 방법
브라우저는 처음 통신하는 서버와 완전한 HTTP 요청과 응답을 주고받는다.
이후 HTTP 응답 헤더에 포함된 Cache-Control 헤더를 따라서 리소스의 생명 주기가 결정된다.
유효성
HTTP는 클라이언트-서버 프로토콜이기 때문에 리소스가 변경되었다고 해도 서버는 캐시와 클라이언트에 접근할 수 없다. 따라서 서버는 리소스에 대한 만료 시간을 알려줄 수 밖에 없다.
Cache-Control
헤더 값으로max-age=<seconds>
값을 지정하여 캐시의 유효기간을 설정한다.▴ Cache-Control max-age 값 대신 Expires 헤더로 캐시 만료 시간을 지정할 수 있다.
유효 기간이 지나기 전
서버에 요청을 보내지 않고 디스크 또는 메모리에서 캐시를 읽어와 사용한다.
유효 기간이 지난 후
브라우저는 서버에 조건부 요청을 통해 캐시가 유효한지 재검증을 수행한다.
대표적인 재검증 요청 헤더로
ETag
값과 현재 서버 리소스의ETag
값이 같은지 확인한다.Last-Modified
값 이후에 서버 리소스가 수정되었는지 확인한다.[첫 요청 이미지]
[유효기간이 지난 후 요청 이미지]
참고 사항
캐시가 만료되기 전 리소스를 업데이트 한다면?
→ 리소스가 변경되었다면 URL을 변경하여 새로 다운로드하도록 강제할 수 있다.
임의의 숫자나 버전을 파일명에 삽입해서 결과물마다 고유한 URL을 가지게 하면, 같은 URL에 대해서는 내용이 바뀌는 경우를 없앨 수 있다.
한번 브라우저에 캐시가 저장되면 만료될 때까지 캐시는 계속 브라우저에 남아 있으므로 서버의 어떤 작업이 있어도 브라우저의 유효한 캐시를 지우기 어렵다. 때문에
Cache-Control
의max-age=<seconds>
값을 신중히 설정해야한다.모든 브라우저에서 HTTP 캐시를 사용할 수 있다.
GET
메소드에 대한 응답을 캐싱하고 다른 메소드들은 제외된다.꼬리 질문
Beta Was this translation helpful? Give feedback.
All reactions