HTTP: 세션

poburi FE·2020년 10월 19일
0

THL

목록 보기
8/10

HTTP 프로토콜은 사용자의 상태를 유지하는 능력이 없다.
사용자가 로그인을 통해서 인증을 했다는 사실을 지속적으로 파악하기 어렵다.

그래서 고안된 것:
1. 사용자가 웹서버에 접근 할 때 사용자를 식별 할 수 있는 URL 파라미터를 릴레이로 전달
2. 브라우저에 쿠키를 심어서 사용자의 상태를 기억하는 방법을 사용한다.

두 방법 모두 보안상 취약점으로 인해서 잘 사용하지 않음.
대신 사용자를 식별 할 수 있는 의미 없는 문자만을 쿠키로 저장하고, 사용자에 대한 식별자가 서버에 도착 했을 때 이것과 일치하는 사용자 정보를 데이터베이스에서 조회해서 인증 상태를 유지하는 방법을 사용한다.

HTTP와 같은 클라이언트-서버 프로토콜에서 세션은 다음의 세 가지 과정으로 이루어진다.:

  1. 클라이언트가 TCP 연결을 수립한다.
  2. 클라이언트는 요청을 전송한 뒤 응답을 기다린다.
  3. 서버는 요청에 대해 처리후 그에 대한 응답을 상태코드 그리고 요청에 부합하는 데이터와 함께 돌려보낸다.

연결 수립

클라이언트-서버 프로토콜에서 클라이언트는 연결을 수립한다.
HTTP에서 연결을 여는 것은 보통의 경우 TCP인 기본적인 전송 계층 내에서 연결을 수립하는 것을 뜻한다.

TCP를 이용할 경우 컴퓨터 상의 HTTP 서버를 위한 기본 포트는 80인데 8000 혹은 8080처럼 다른 포트들도 이용한다.

클라이언트 요청 전송

연결이 한번 수립되고 나면, 사용자-에이전트는 요청을 보낼 수 있다.

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: kr
  • developer.mozilla.org의 최상위 페이지를 가져오도록 요청
  • 가능하면 서버에게 사용자-에이전트가 해당 페이지에 대해 한글로 된 페이지를 원한다고 알려줌

헤더 블록으로부터 데이터 블록을 구분짓는 첫번째 빈줄에 주목하자.
헤더 중에 Content-Length:헤더가 없으므로 데이터 블록은 비어있고
서버는 헤더의 마지막을 나타내는 빈줄을 받는 즉시 요청을 처리할 수 있다.

POST / contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Legnth: 64
Content-Type: application/x-www-form-urlencoded

name=Po%20User&request=Send&20me

서버 응답의 구조

연결된 에이전트가 자신의 요청을 전송하고 난 뒤에, 웹 서버가 처리하고 최종적으로 응답을 돌려보낸다.

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2020 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2020 20:18:22 GMT
ETag: "34830948309"
Accept-Ranges: bytes
Content-Length: 29830
Content-Type: text/html

<!DOCTYPE html...

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 끝났는지 아닌지를 가르쳐준다.

profile
FE 개발자 poburi

0개의 댓글