초기 웹은 html 페이지나 이미지, 사용자데이터, 웹서비스 중간에 발생하는 일시적인 데이터 등 모든 정보를 웹서버에 저장해두도록 설계되었다. 그러므로 웹브라우저는 웹서버로부터 데이터를 받아 사용자화면에 출력하는 기능만 담당하였다.
그 후 웹의 사용이 폭발적으로 늘어나게 되어, 웹서버의 저장 부담이 커지고 웹브라우저와 웹서버 사이의 통신트래픽도 증가하여 웹서비스의효율이 나빠졌다. 그래서 html5에서는 웹브라우저가 실행되는 사용자컴퓨터에도 데이터를 저장해 두는 다양한 기능을 마련한다.
HTML5에서 로컬컴퓨터의 저장기능이 있는 또 다른 있는 이유는 웹서버와 연결이 끊어진 오프라인상태에서도 브라우저 상에서 웹앱이 실행될 수 있도록 하기 위함이다.
브라우저와 웹서버의 통신:
브라우저와 웹서버 사이 HTML페이지 등 HTML자원을 주고받는 절차와 형식을 정한 http통신규칙이 존재.
비연결형 프로토콜(conectionless protocol):
html session후 브라우저와 웹서버 사이의 네트워크 연결이 끊어진다. 브라우저는 세션(session)마다 웹서버와 네트워크 연결을 새로 만든다.
쿠키(Cookie):
쿠키란 웹서버가 브라우저에게 지시하여 사용자의 로컬컴퓨터에 저장하는 4KB(약 4,000byte, 4*1024 이하의 작은데이터이다.
쿠키의 도입:
기본적으로 브라우저와 웹서버 사이의 데이터통신은 무상태(stateless)프로토콜이다. 웹서버는 각 요청을 개별적으로 처리하기 때문에 연속된 두 요청을 연관시키는 기능이 없는데 이를 무상태라고 부른다.
쿠키는 이 문제를 해결하기 위해 도입되었다.
쿠키는 브라우저가 웹사이트에 접속하면 그 응답으로서 사용자컴퓨터에 저장하도록 '웹사이트'가 브라우저에게 보내는 작은 데이터이며(웹사이트의 부스러기), 브라우저는 그 사이트에 접속할 때마다 쿠키를 함께 보낸다.
쿠키는 누가 언제 만드는가? 브라우저가 처음 접속해올때 '웹서버'가 만들어 브라우저에게 보낸다.
쿠키의 기본 구성은? (쿠키이름, 값)의 쌍.튜플
쿠키는 누가 어디에 저장하는가? 브라우저가 로컬컴퓨터에 파일형태로 저장된다.
쿠키는 언제 사용되는가? 브라우저가 웹서버에게 보내는 모든 요청에 삽입하여 전송. 쿠키를 서버컴이 만들었는데 브라우저있는 로컬컴이 또 서버에 보내기도 하구나.
쿠키는 누가 어떤 목적으로 사용하는가? 웹서버가 사용자의 '연속된 요청'들을 인식하기 위해
쿠키 데이터의 구성:
로컬컴터에는 사용자가 접속한 여러 웹사이트로부터 많은 쿠키들이 저장되어있다.
브라우저마다 쿠키를 저장하는 위치와 방식이 다르다. 하나의 파일에 모든 쿠키를 저장하기도 하고 쿠키마다 별도의 파일에 저장하기도 한다.
쿠키는 세미콜론(;)우로 구분되는 6개의 속성으로 구성된다. 웹서버는 '쿠키이름'과 '값'을 보낸다고 하지만 생략된 것이고 사실은 6개의 정보를 보낸다.
name=value; 쿠키이름과 쿠키값
Expires=[Date]; 쿠키의 유효시간
Domain=[Domain]; 쿠키를 필요로 하는 웹서버 도메인
Path=[Path]; 쿠키를 필요로 하는 웹페이지 경로명, Path에는 도메인 내의 폴더(서브도매인)가 지정된다.
[Secure]; 암호화한 경우에만 쿠키전송가능
HttpOnly http통신외에 다른 통신으로 쿠키전송불허
실습2: 구글 웹사이트의 쿠키보기
'웹서버'가 쿠키를 보낼 때 http응답헤더의 Set-Cookie: 뒤에 쿠키데이터를 심어보낸다. Set-Cookie는 브라우저에게 쿠키를 저장하라는 지시이다.
브라우저(익스플로러)가 구글웹서버에 접속할때 익스플로러가 받은 응답헤더이다.
Set-Cookie:
NID=72~~~;
expires= Fri, 15-Apr-2016 20:04:29 GMT;
path=/;
domain=.google.com;
HttpOnly
쿠키이름이 NID이고 쿠키값은 구글만이 아는 긴 문자열로 이루어져 있다. 쿠키의 유효시간은 2016년 4월 15일 20시 4분 29초이며, google.com도메인(도메인영역)에 속한 웹자원을 요청할 때마다 NID와 값을 보내도록 지정하고 있으며, 구글웹서버와의 http통신외 다른 곳에는 NID쿠키를 보내서는 안됨을 지시하고 있다.
NID쿠키저장:
부라우저는 응답헤드의 Set-Cookie: 명시된 NID쿠키를 쿠키파일에 저장한다.
google.com'도메인'에 웹페이지를 요청할 때마다 NID쿠키를 함께 보낸다. (요청할때마다 쿠키를 함께 보낸다)
브라우저는 www.google.com사이트 내 어떤 웹자원이라도 요청하게 되면, NID쿠키를 함께 보내야만 한다.
www.google.com사이트에서 nav_logo231_gr.png 이미지를 가지고 오기 위해 www.google.com에 보낸 요청 해더를 보여준다. 이곳에 NID쿠키가 전달됨을 볼 수 있다. 그리고 헤더를 통해 보낸 정보에 대한 개요를 볼 수 있다.
쿠키파일:
쿠키가 사용자컴퓨터에 저당되는 것은 맞지만 저장방식과 위치는 표준이 없기 때문에 브라우저마다 다르다.
자바스크립트로 쿠키다루기:
쿠키는 자바스크립트 코드로 직접 로컬 컴퓨터에 저장하거나 저장된 쿠키를 읽을 수 있다.
쿠키쓰기:
브라우저가 접속한 웹사이트의 모든 쿠키들은 document.cookie프로퍼티에 문자열 형태로 연결되어 있다.
자바스크립트로 새로운 쿠키를 저장하려면 document.cookie에 문자열형태로 쿠키를 달아주기만 하면 된다.
실습3: 쿠키활용 - 자바스크립트로 방문자 이름과 장문횟수관리
쿠키의 문제점:
쿠키는 웹의 '무상태(stateless)프로토콜'의 문제점을 해결하는 한 가지 방법으로 사용되고 있다. 하지만 4KB이하의 소량만 저장가능하며, 브라우저가 웹서버에 웹자원을 요청할때마다 요청'패킷(packet)'에 함께 전송되기때문에 상당한 양의 네트워크 트래픽을 발생시킨다.
'네트워크' 카테고리의 다른 글
[네트워크] OSI Model (0) | 2020.06.22 |
---|---|
[네트워크] MAC Address 메모 (0) | 2020.06.16 |
[NET] TCP/IP PROTOCOL(forouzan) 목차 (0) | 2020.06.14 |
[네트워크] 프록시 서버 Proxy (0) | 2020.06.09 |
[네트워크] HTTP 01 (0) | 2020.05.31 |