Spring

HTTP 헤더 - 2

알라알리야 2023. 2. 26. 23:03

캐시와 조건부 요청

캐시가 있으면 캐시 가능 시간동안 네트워크를 사용하지 않아도 되어서 로딩 속도가 빨라지고 네트워크 사용량을 줄일 수 있다.

 

 

검증 헤더 + 조건부 요청 ( Last - Modified ) + ( If - Modified - Since, If - Unmodified - Since )

  1. 서버에 저장되어 있는 Last - Modified (데이터가 마지막에 수정된 시간) 를 웹 브라우저 캐시에 저장
  2. 캐시 시간이 초과되면 서버에 If - Modified - Since가 같은지를 조건부로 요청
  3. Last - Modified 가 같으면 HTTP 바디 를 빼고 HTTP 헤더만 304 Not Modified 상태로 전송 (용량 작음)
  4. 다르면 HTTP 바디 + 헤더를 200 OK 상태로 전송

검증 헤더 + 조건부 요청 ( E-Tag ) + ( If - None - Match, If - Match )

  1. 서버에 저장되어 있는 E-Tag (해시 값) 를 웹 브라우저 캐시에 저장
  2. 캐시 시간이 초과되면 서버에 If - None - Match 로 해시 값이 같은지를 조건부로 요청
  3. E - Tag가 같으면 HTTP 바디 를 빼고 HTTP 헤더만 304 Not Modified 상태로 전송
  4. 다르면 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 하위 호환까지 무효화 하기 위함)

위의 명령어들이 모두 있어야 한다.