1. 쿠키 (cookie)
- 서버에서 생성되어 클라이언트 측에 저장되는 <이름, 값> 쌍 형태의 데이터
- 쿠키 만료 기간과 같은 추가적 속성값도 가질 수 있음
- HTTP의 스테이트리스한 특성을 보완하기 위한 대표적 수단
- atuhorization, shopping carts, recommendation, user session state(Web e-mail)등에 사용될 수 있음
1.1. 응답 메시지
서버가 클라이언트에게 쿠키를 전송할 때는 응답 메시지의 Set-Cookie가 활용됨
Set-Cookie: 이름=값
Set-Cookie: 이름=값; 속성1
Set-Cookie: 이름=값; 속성1; 속성2
- 도메인과 경로, 유효기간, 보안 등이 대표적인 쿠키 속성값
- 'domain=example.net' : 쿠키를 사용할 도메인을 example.net으로 제한
- 'path=/lectures' : 쿠키를 사용할 경로를 /lectures로 제한
- 'Expires=요일, DD-MM-YY HH:MM:SS GMT' ( 'Expires=Fri, 23 Aug 2024 09:00:00 GMT' ) : 명시된 유효기간이 지나면 해당 쿠키는 삭제 되어 전달되지 않음
- 'Max-Age=3000000' : 초 단위 유효기간
- 'Secure' : HTTP의 더 안전한 방식인 HTTPS를 통해서만 쿠키를 송수신하도록 하는 속성
- 'HttpOnly': 자바스크립트를 통한 쿠키의 접근을 제한, 오직 HTTP 송수신을 통해서만 쿠키에 접근
1.2. 요청 메시지
클라이언트는 Cookie 헤더로 전달받은 쿠키를 서버에 전송
Cookie: 이름=값; 이름=값;
- 특정 서버로부터 쿠키를 전달받았다면 다음부터 해당 서버에 요청을 보낼 때 전달받은 쿠키를 자동으로 전송
1.3. 쿠키와 보안
- 쿠키는 사이트가 나에 대해 너무 많은 정보를 알게 함.
- third party persistent cookies(tracking cookie): 여러 웹사이트에 걸쳐 사용자의 활동을 추적할 수 있게 해주는 쿠키
더보기
💁🏻♀️웹 스토리지란?
- 웹 브라우저 내의 저장공간으로, 일반적으로 쿠키보다 더 큰 데이터를 저장할 수 있음
- 쿠키는 서버로 자동 전송되지만, 웹 스토리지의 정보는 서버로 자동 전송되지 않음
- 로컬 스토리지
- 별도로 삭제하지 않는 한 영구적으로 저장이 가능한 정보
- 세션 스토리지
- 세션이 유지되는 동안(쉽게 말해, 브라우저가 열려 있는 동안) 유지되는 정보
2. 캐시
- 응답 받은 자원의 사본을 임시 저장하여 불필요한 대역폭 낭비와 응답 지연을 방지하는 기술
- 목표: satisfy client request without involving origin server
- browser는 모든 HTTP request를 캐시에 보내고 object가 cache에 있으면 cache가 object를 반환하고, 없으면 cache가 origin server에 요청해 object를 받은 후 client에 반환해줌 (web cache는 origin server에게는 client, requesting client에게는 server)
- 캐시는 주로 ISP(대학, 회사, residential ISPs)에 의해 운영됨
- 전용 캐시: 클라이언트에 저장
- 공용 캐시: 클라이언트와 서버 사이에 위치한 중간 서버에 저장
2.1. 캐시 사용 이유
- reduce response time for client request (응답 속도 향상)
- cache is closer to client
- reduce traffic on an institution’s access link
- enhance entire performance of Internet
- 인터넷에 캐시가 많이 존재하면, 콘텐츠 제공자가 서버 자원이 부족하더라도 캐시를 이용해 콘텐츠를 더 빠르고 효율적으로 전달 (cf. P2P 파일 공유)
2.2. 캐시 유효 기간
- 대부분의 캐시된 데이터에는 유효기간이 설정되어 있음.
- 유효기간 부여 방법 (응답 메시지)
- Expires: Fri, 23 Aug 2024 09:00:00 GMT
- Cache-Control: max-age=1200
- 클라이언트는 응답받은 자원을 임시 저장하여 이용하다가 유효기간이 만료되면 다시 서버에 자원을 요청해야 함
- 유효기간 부여 방법 (응답 메시지)
- 유효기간이 부여되는 이유는?
- 클라이언트가 캐시를 참조하는 사이 서버의 원본 데이터가 변경되어 원본 데이터와 캐시된 사본 데이터 간의 일관성이 깨질 수 있음
- 유효기간을 설정하고 만료된 자원을 재요청함으로써 캐시 신선도를 검사할 수 있고, 원본 데이터가 변경되었을 때 해당 자원을 다시 응답받음으로써 캐시 신선도를 높게 유지할 수 있음
- 캐시 신선도(cache freshness) : 캐시된 사본 데이터가 서버의 원본 데이터와 얼마나 유사한지의 정도
- 캐시 데이터의 유효기간이 자나면 반드시 서버로부터 다시 자원을 응답받아야 할까?
- No! 캐시된 데이터가 여전히 최신 데이터라면 굳이 서버로부터 같은 자원을 응답 받을 필요가 없음
- -> 원본 자원이 변경된 적 있는지 질의
2.2.1. 원본 자원 변경 여부
- 원본 자원의 변경 여부를 묻는 헤더 (요청 메시지)
- 'If-Modified-Since: Fri, 23 Aug 2024 09:00:00 GMT' : 특정 시점 이후로 원본 자원에 변경이 있었다면, 그때만 변경된 자원을 메시지 본문으로 응답하도록 서버에 요청하는 헤더
- Etag(Entity Tag) : 자원의 버전을 식별하기 위한 정보. 자원을 변경할 때 마다 Etag값이 변경됨
- If-None-Match: "abc" : 명시된 Etag 값("abc")과 일치하는 Etag가 있는지, 없다면 변경된 자원으로 응답하도록 요청하는 헤더
- 서버가 요청받은 자원이 변경된 경우
- 서버는 상태 코드 200(OK)과 함께 새로운 자원을 반환
- 서버가 요청받은 자원이 변경되지 않은 경우
- 메시지 본문 없이 304 (Not Modified)를 통해 클라이언트에게 자원이 변경되지 않았음을 알림
- Last-Modified 헤더로 자원의 마지막 변경 시점을 알릴 수 있음
- 서버가 요청받은 자원이 삭제된 경우
- 서버는 상태 코드 404(Not Found)를 통해 자원이 존재하지 않음을 알림
'CS 스터디 > 네트워크' 카테고리의 다른 글
[네트워크] Application Layer(응용 계층) - DNS와 URL/URI (0) | 2024.10.10 |
---|---|
[네트워크] Application Layer(응용 계층) - HTTP 메시지 구조, 메서드, 상태코드 (2) | 2024.10.10 |
[네트워크] Application Layer(응용 계층) - HTTP 특징과 HTTP connections (0) | 2024.10.10 |
[네트워크] 네트워크의 큰 그림 (1) | 2024.10.10 |