Conditional Get
클라이언트는 이전에 한번 요청해서 돌려받은 리소스에 대해 다시 한번 요청을 할 때, 불필요한 트래픽을 줄이기위해 해당 리소스가 변경된 경우에만 다시 보내달라고 요청할 수 있다.
Cache는 언제 사용되는가
- Conditional Get을 이용해 트래픽을 줄일 수는 있지만, Round Trip은 줄일 수 없다.
- 어떤 리소스에 변경이 있었는지 확인하려면 반드시 Origin 서버에 요청을 보내고 응답이 올때까지 기다려야만 한다. (Origin 서버가 먼 곳에 있다면, 이 지연은 수백ms에 달할 수도 있다.)
- 사용자가 오래 기다리지 않고 빨리 리소스를 받을 수 있게하고 싶다.
Response Header 중 expires, age, cache-control: max-age로 리소스의 caching 상태 확인 가능
Caching을 바라 보기 위해서 사용하는 헤더 : Last-Modified, ETag
Last-Modified, ETag 값이 같을 경우, 304 response
Last-Modified
- Last-Modified는 Date보다 이후여서는 안된다. (MUST NOT)
- Last-Modified는 Date를 계산한 시점과 최대한 가까운 시점에서 얻은 것이어야 한다. (SHOULD)
- 서버는 가능한 항상 Last-Modified 헤더를 보내야 한다. (SHOULD)
- 요청 메시지
GET /index.html HTTP/1.1
If-Modified-Since: Sat, 2 Feb 2013, 20:30:00 GMT
- 응답 메시지
- 최근 변경 일시가 클라이언트가 알고있던 것과 같은 경우의 응답 메시지
HTTP/1.1 304 NOT Modified
Date: Wed, 14 Feb 2013 06:25:24 GMT
- 최근 변경 일시가 클라이언트가 알고있던 것과 다른 경우의 응답 메시지
HTTP/1.1 200 OK
Content-Length: 55
Contenty-Type: text/html; charset=UTF-8
Date: Wed, 14 Feb 2013 06:25:24 GMT
Last-Modified: Sun, 3 Feb 2013 16:00:00 GMT <- 새 최근 변경 일시
<body 생략>
ETag
- Strong ETag : 리소스가 조금이라도 바뀌면 바뀌어야 한다.
- Weak ETag : 리소스에 의미있는 수준의 변화가 없다면 바뀌지 않을 수 있다.
- 요청 메시지
GET /index.html HTTP/1.1
If-None-Match: "a6f305a"
- 응답 메시지
- ETag가 클라이언트가 알고있던 것과 같은 경우의 응답 메시지
HTTP/1.1 304 NOT Modified
Date: Wed, 14 Feb 2013 06:25:24 GMT
- ETag가 클라이언트가 알고있던 것과 다른 경우의 응답 메시지
HTTP/1.1 200 OK
Content-Length: 55
Contenty-Type: text/html; charset=UTF-8
Date: Wed, 14 Feb 2013 06:25:24 GMT
Etag: "abcde74" <- 새 ETag
<body 생략>
'공부' 카테고리의 다른 글
클린 코드 - 주석,포맷팅 (0) | 2022.01.09 |
---|---|
[HTTP의 이해] 1. 개요, HTTP 메소드, HTTP 상태 코드 (0) | 2020.10.01 |