[Computer Network] Cookie, Web Caching, Conditional Get
Cookie
- HTTP 서버는 stateless이다.
- 이 덕분에 서버 디자인이 쉬워졌고 이에따라 수많은 TCP연결을 처리할 수 있는 고성능 웹서버를 만들 수 있게되었다.
- 하지만, 웹 서버가 stateless일지라도, 웹사이트가 유저를 인식하는게 좋을때가 있다.
- 유저의 접근을 제한한다던지
- 사용자에따라 다른 컨텐츠를 제공한다던지를 위해
- 이러한 목적을 위해
HTTP는 Cookie를 사용해 유저를 추적한다.
구성요소
- Cookie 설정은 4가지의 구성요소로 이뤄진다.
- HTTP response message의 cookie header line
- HTTP request message의 cookie header line
- 유저의 end system의 브라우저에 의해 관리되는 cookie파일
- 웹 사이트의 백엔드 데이터베이스
절차
- 사용자가 웹사이트에 방문하면 서버는 백엔드 데이터베이스에 유저의 유일한 식별숫자를 생성한다.
- 서버가 response를 날릴때,
set-cookie
라는 헤더와유저 식별 숫자
를 함께 날리게되고, 이는 사용자의 컴퓨터에 저장된다. - 사용자가 계속 이 사이트를 사용할때마다,
이 유저 식별 숫자를 cookie header line에 포함해
request msg에 보내게되는데, 이를통해서버는 이 숫자로 사용자를 계속 식별
할 수 있다.
쿠키가 사용되는 예시
- 세션관리, 개인화(맞춤 광고 설정) 등등
쿠키 파일 확인
-
m1 Mac기준, 크롬의 쿠키파일은
~/Library/Application Support/Google/Chrome/Default
에 저장되어있다. - 해당파일 정보를
file
명령어를 통해 확인해보면 sqlite3의 형식으로 저장되어 있는것을 확인할 수 있다. - 실제 이 데이터베이스에 접속해 쿼리문을 날려보면 아래와 같은 정보를 얻을 수 있다.
Web Caching
- Web cache == proxy server는 원래 목적지 서버를 대신해 HTTP 요청을 수행하는 네트워크 객체이다.
- Web cache는 자신만의 저장공간을 가지며, 최근에 요청된 객체들을 보관하고있다.
- 사용자의 브라우저는 Web cache를 향해 HTTP 요청을 먼저 수행하도록 설정될 수 있다.
절차
Web cache는 클라이언트, 서버의 역할을 모두 수행한다.
- 브라우저는 일단 Web cache와 TCP연결을 하고, HTTP request를 날리게된다.
- 만약 Web cache가 요청된 객체를 스토리지에 갖고있으면 해당 객체를 HTTP response로 전송한다.
- 만약 없으면 원본 서버와 TCP 연결 후 해당 객체를 받는다.
- 받은 객체를 Web cache 저장소에 저장하고, 복사해서 브라우저에 HTTP response로 전달한다.
사용하는 이유
- 클라이언트와 원본 서버 사이에 속도가 클라이언트와 Web cache 사이의 속도보다 느리다면 클라이언트 요청에 대한 병목을 줄일 수 있다.
- access link를 통해 원본 서버에 접근하는 속도가 일반적으로 훨씬 느리다.
- caching hit 비율이 높으면 높을수록 평균적인 응답속도는 더 빨라진다.
- 기관의 access link에 대한 트래픽을 감소시킬 수 있다.
- access link를 업그레이드 하는 비용은 매우 비싸기에 caching을 사용해 비용을 줄일 수 있다.
- CDNs(Content Distribution Networks)의 증가
- CDN 기업은 인터넷에 지역적으로 분산환 cache들을 설치해 트래픽을 지역화한다.(한곳에 몰리지 않게 한다.)
Conditional get
- web caching을 이용할때의 문제점은
cache의 객체가 오래된 것일수도 있다
는 것이다. - 즉, 사본이 클라이언트(proxy server)에서 캐시된 이후 웹 서버(원본 서버)에 저장된 오브젝트가 수정되었을 수 있다.
- 따라서, web cache가 자신이 가진 객체가 최신의 것인지 확인하는 방법이 필요한데, HTTP가 사용하는 이 메커니즘은
conditional GET
이라고 한다.(조건부 GET이라고 해도 될 듯)
예시
- proxy server가 웹 서버에 request message를 보낼때(cache not hit)일때를 생각해보자.
- 웹 서버는 cache에 객체를 보내는데,
Last-modified
필드를 포함해서 보내게된다. - cache는 이 객체를 저장하고, 브라우저에게 보내게된다.
- 일정시간이 지난 후에 다른 브라우저가 cache에 동일한 객체를 요청하면, cache는
up-to-date check
를conditional get
을 통해 하게된다. - cache는
if-modified-since
헤더에 객체의Last-modified
필드의 값을 기입해서 원본 서버에 HTTP get request를 보내게되는데,- 만약 원본 서버의 객체가 수정되어 이 헤더 필드의 값과 달라지면, cache의 객체를 최신의 객체로 업데이트하는 절차를 밝고,
- 수정되지 않은 상태면
304 not modified
를 status line에 기입해 HTTP response로 보내게된다.
댓글남기기