HTTP는 원래 HTML로 쓴 문서를 열람하기 위해 고안된 것인데, 쿠키와 세션을 사용하면 사용자와의 정보 송수신을 연속된 흐름으로서 제어할 수 있다.

FTP는 telnet으로 서버에 접속을 하면 로그인을 해야 내 디렉터리를 알 수 있다.

이것은 FTP서버가 앞선 요청을 기억하고 있으면서 그것을 바탕으로 다음 요청을 실행하기 때문이다.

즉 상태 유지 프로토콜(Stateful Protocol)이다.

그렇다면HTTP는?

무뚝뚝하다.

HTTP는 한 번의 요청만으로 용건이 해결되어 상태를 보존하지 않는다.

즉 무상태 프로토콜 (Stateless Protocol)이라고 한다.

WWW를 고안했을 당시 FTP가 이미 있었는데 왜 HTTP를 새로 만들었을까?

그것은 통신 절차가 많아 오버헤드가 크고 접속을 위해 인증이 필요해서 간단한 HTTP프로토콜이 필요했던거다.

근데 요즘 웹은 로그인하고 상태가 보존 되지 않느냐?

그것은 HTTP 설계할 당시 HTTP로 웹 애플리케이션을 구현하리라 생각하지 않았기 때문이다.

점점 웹이 발전하면서 로그인정보를 매번 편하게 확인하기 위해 쿠키와 세션가 추가 설계 되었다.

>쿠키

get을 통해 로그인 정보를 보내면 노출 될 것이고 post를 통해 보내면 매번 폼태그를 포함 시켜야 되고... 골치다.

그래서 쿠키로 한 번 로그인 정보를 교환 해보겠다.

로그인 요청을 보내면 서버에서 응답을 보낸다.

그 응답헤더에 쿠키를 넣어서 보낸다. (웹서버에서 구현해야함)

브라우저는 쿠키를 저장하고 같은 웹서버 요청때마다 쿠키를 헤더에 넣어서 보내게 된다.

로그아웃하면 서버에서 쿠키를 삭제하도록 응답헤더에 알려주고 브라우저에서 삭제하게 된다.

원래는 넷스케이프라는 웹 브라우저에서 만든 기술이었는데 나중에 표준화 됐다.

근데 쿠키는 보안상 위험하다. PC에 저장되어있는 쿠키를 까보면 그만이기 때문이다.

> 세션

우리가 로그인하고 쇼핑을 하고 주문을 하고 로그아웃을 하는 일련의 처리흐름을 세션이라고 한다.

그렇다면 여러 단계에 걸쳐 흐름이 진행 될텐데 이 흐름의 상태를 보존하고 있어야 한다. 이것을 세션 상태라고 하자.

세션상태는 서버측 메모리나 DB에 저장되어있다.

클라이언트와 서버는 세션ID라는 고유의 식별자를 가지고 주고 받는다.

웹 애플리케이션에서의 로그인처럼 세션을 개시할 때는 웹서버 측이 새로운 세션 ID를 발행해서 쿠키에 저장한다.

클라이언트는 다음 요청부터 쿠키를 보내어 서버에서 세션 ID를 꺼내 세션 상태들을 복원시킨다.

이렇게 함으로써 쿠키에 저장할 수 있는 정보량의 제한을 무시하며 안전성도 높아졌다. (물론 세션 ID 도둑 맞으면 해당 서버의 데이타는 털린다. 상대적으로 안전할 뿐.)

results matching ""

    No results matching ""