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를 비교해 다르면 다시 받기!
'코딩 > 네트워크' 카테고리의 다른 글
| 네트워크 식별자 IP 주소 & Port 번호 (0) | 2023.05.30 |
|---|---|
| [HTTP] HTTP 헤더 (0) | 2023.05.28 |
| [HTTP] 상태 코드 (0) | 2023.05.26 |
| [HTTP] 클라이언트에서 서버로 데이터 전송하기 (0) | 2023.05.25 |
| [HTTP] HTTP 메세지 & API URI 설계 방법 (0) | 2023.05.24 |