본문 바로가기

코딩/네트워크

[HTTP] 쿠키 & 캐시

HTTP는 무상태(Stateless) 프로토콜이므로, 모든 요청에 정보를 포함해서 보내야 한다.

로그인과 같이 계속 유지되는 정보도 항상 보내야 해 비효율적!

이를 해결하기 위해 쿠키 를 사용한다.

set-cookie: 서버에서 클라이언트로 쿠키 전달(응답)

Cookies: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달

 

쿠키는 항상 서버에 전송되므로 최소한의 정보만 사용(세션 id, 인증 토큰)

 

ex) set-cookie: sessionId=qwer1234; expires=Sat, 18-May-2023 00:00:00 GMT; path=/; domain=.google.com; Secure

- 생명주기 : 만료일 또는  시간을 지정함. 생략하면 브라우저 종료시 까지만 유지

- 도메인 : 명시한 문서 기준 도메인 + 서브 도메인 포함. 생략하면 현재 문서 기준 도메인만 적용

 - 경로 : 이 경로를 포함한 하위 경로 페이지만 쿠키 접근, 일반적으로 path=/ 로 지정

 - 보안 : Secure 를 적용하면 https인 경우에만 전송 

 

캐시: 쿠키와 마찬가지로 정보를 저장하는데, 쿠키는 사용자 인증 정보와 같이 크기가 작은 정보를 저장

캐시는 이미지, 오디오 파일 등 웹페이지 요서를 저장한다!

 

캐시 검증 헤더

요청시 Last-Modified 정보를 추가.

만약 서버에 있는 Last-Modified와 동일하다면 유효기간이 지난 캐시여도, 저장된 캐시를 사용하도록 함

요청

GET /star.jpg

if-modified-since: 2022년 5월 10일 00:00:00

--> 서버에서 modified 날짜 확인 후 동일하면

 

응답

HTTP/1.1 304 Not Modified

Content-Type: image/jpeg

cache-control: max-age=60

Last-Modified: 2022년 5월 10일 00:00:00

--> body 없이 헤더만 전송

 

클라이언트는 해당 응답을 받고 캐시의 정보를 갱신해 사용한다.

 

날짜 기반으로 검증하면 오류가 발생할 수 있음 (수정 후 원복시 날짜가 바뀜) + 미미한 변경은 그냥 기존 캐시 사용으로 하고 싶음

--> ETag(Entity Tag) 사용

캐시용 데이터에 임의의 고유한 버전 이름 + 해시 태그를 달어둠

이후 캐시끼리 ETag를 비교해 다르면 다시 받기!