Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 김영한
- 스프링
- Proxy
- Thymeleaf
- 인프런
- transaction
- springdatajpa
- http
- pointcut
- Servlet
- java
- kotlin
- jpa
- 알고리즘
- 그리디
- Exception
- Android
- db
- 스프링 핵심 기능
- JDBC
- AOP
- SpringBoot
- Spring Boot
- spring
- 백준
- Greedy
- QueryDSL
- JPQL
- 자바
- 스프링 핵심 원리
Archives
- Today
- Total
개발자되기 프로젝트
검증 헤더와 조건 부 요청 2 본문
1. 검증 헤더
- 캐시 데이터와 서버 데이터가 같은지 검증하는 데이터
- Last-Modified, ETag
2. 조건 부 요청 헤더
- 검증 헤더로 조건에 따른 분기
- If-Modified-Since: Last-Modified 사용
- If-None-Match: ETag 사용
- 조건이 만족하면 200 OK
- 조건이 만족하지 않으면 304Not Modified
3. If-Modified-Since 사용 예시
- 서버측 데이터 미 변경 시
- 캐시 : 2020년 11월 10일 10:00:00 vs 서버 : 2020년 11월 10일 10:00:00
- 해당 조건이 만족하지 않으니 304 Not Modified 및 헤더 데이터만 전송(Body 없음)
- 3xx : 리다이렉션? 어디로? 캐시로! - 서버측 데이터 변경 시
- 캐시 : 2020년 11월 10일 10:00:00 vs 서버 : 2020년 11월 10일 11:00:00
- 해당 조건이 만족함. 200 OK 및 모든 데이터 전송(Body 포함)
4. Last-Modified, If-Modified-Since의 단점
- 1초 미만 단위로 캐시 조정이 불가능
- 날짜 기반의 로직 사용
- 데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 똑같은 경우 다르다고 판단함.
(데이터 변경했다가 원복한 경우 ㅋㅋ) - 날짜 기반이 아니라 서버에서 별도의 캐시 로직을 관리하고 싶은 경우
5. ETag, If-None-Match
- ETag(Entity Tag)
- 캐시 용 데이터에 임의의 고유한 버전 이름을 달아둠
- ETag: "v1.0", ETag:"aaaaa" - 데이터가 변경되면 이 이름을 바꿔서 변경함(Hash를 다시 생성)
- ETag: "aaaaa" -> ETag: "bbbbb" - 진짜 단순하게 ETag만 보내서 같으면 유지, 다르면 다시 받는 방법임!
- 날짜 기반이 아니라 실제 파일 내용 기반으로됨.
6. ETag, If-Non-Match 사용 예시
- 클라이언트가 요청을 보냄
- 서버는 응답 메시지 보냄
HTTP/1.1 200 OK
Content-Type: image/ipeg
cache-control: max-age=60
ETag: "aaaaa"
Content-Length: 34012 - 클라이언트는 응답 결과를 캐시에 저장(ETag = "aaaaa")
- 캐시 시간 초과 후 클라이언트가 재 요청함.
GET /star.jpg
If-None-Match: "aaaaa" - 서버 측에서 ETag와 클라이언트에서 보낸 내용과 같은지 판단함.
- 서버에서 데이터 변경되지 않은 경우, 304 Not Modified 및 헤더만 보냄(body 없음)
HTTP/1.1 304 Not Modified
content-type: image/jpeg
cache-control: max-age=60
ETag: "aaaaa"
Content-Length: 34012
7. ETag, If-Non-Match 정리
- 간단하게 ETag를 서버에 보내서 같으면 유지! 다르면 다시 받음!
- 캐시 제어 로직을 서버에서 완전히 관리할 수 있음
- 클라이언트는 단순히 ETag값을 서버에 제공
- 클라이언트는 어떻게 서버에서 판단하는지 로직 모름
'인프런 > [인프런]모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
프록시 캐시, 캐시 지시어(directives) (0) | 2021.08.04 |
---|---|
캐시와 조건부 요청 헤더 (0) | 2021.08.04 |
검증헤더와 조건부 요청 1 (0) | 2021.08.04 |
Header - 캐시 기본 동작 (0) | 2021.08.04 |
Header - 쿠키 (0) | 2021.08.04 |
Comments