Spring
HTTP 헤더 - 2
알라알리야
2023. 2. 26. 23:03
캐시와 조건부 요청
캐시가 있으면 캐시 가능 시간동안 네트워크를 사용하지 않아도 되어서 로딩 속도가 빨라지고 네트워크 사용량을 줄일 수 있다.
검증 헤더 + 조건부 요청 ( Last - Modified ) + ( If - Modified - Since, If - Unmodified - Since )
- 서버에 저장되어 있는 Last - Modified (데이터가 마지막에 수정된 시간) 를 웹 브라우저 캐시에 저장
- 캐시 시간이 초과되면 서버에 If - Modified - Since가 같은지를 조건부로 요청
- Last - Modified 가 같으면 HTTP 바디 를 빼고 HTTP 헤더만 304 Not Modified 상태로 전송 (용량 작음)
- 다르면 HTTP 바디 + 헤더를 200 OK 상태로 전송
검증 헤더 + 조건부 요청 ( E-Tag ) + ( If - None - Match, If - Match )
- 서버에 저장되어 있는 E-Tag (해시 값) 를 웹 브라우저 캐시에 저장
- 캐시 시간이 초과되면 서버에 If - None - Match 로 해시 값이 같은지를 조건부로 요청
- E - Tag가 같으면 HTTP 바디 를 빼고 HTTP 헤더만 304 Not Modified 상태로 전송
- 다르면 HTTP 바디 + 헤더를 200 OK 상태로 전송
Cache - Control
- max - age : 캐시 유효 시간
- no - cache : 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용
- no - store : 데이터에 민감한 정보가 있으므로 저장하면 안됨
HTTP 1.0 하위 호환 (현재는 Cache - Control을 사용)
Pragma - 캐시 제어
Expires - 캐시 만료일을 정확한 날짜로 지정
프록시 캐시
웹 브라우저에서 캐시를 다운 받으려면 원 서버에서 다운을 받아야 한다.
원서버에서 받으면 속도가 느리기 때문에 중간에 프록시 캐시 서버가 원 서버의 캐시를 받고 웹 브라우저에 뿌린다.
확실한 캐시 무효화
- Cache - Control : no - cache
- Cache - Control : no - store
- Cache - Control : must - revalidate (원 서버에 접근할 수 없는 경우 200 OK를 반환하지 않고 항상 504 오류를 발생시킨다)
- Pragma : no - cache (HTTP 1.0 하위 호환까지 무효화 하기 위함)
위의 명령어들이 모두 있어야 한다.