HTTP 프로토콜은 사용자의 상태를 유지하는 능력이 없다.
사용자가 로그인을 통해서 인증을 했다는 사실을 지속적으로 파악하기 어렵다.
그래서 고안된 것:
1. 사용자가 웹서버에 접근 할 때 사용자를 식별 할 수 있는 URL 파라미터를 릴레이로 전달
2. 브라우저에 쿠키를 심어서 사용자의 상태를 기억하는 방법을 사용한다.
두 방법 모두 보안상 취약점으로 인해서 잘 사용하지 않음.
대신 사용자를 식별 할 수 있는 의미 없는 문자만을 쿠키로 저장하고, 사용자에 대한 식별자가 서버에 도착 했을 때 이것과 일치하는 사용자 정보를 데이터베이스에서 조회해서 인증 상태를 유지하는 방법을 사용한다.
HTTP와 같은 클라이언트-서버 프로토콜에서 세션은 다음의 세 가지 과정으로 이루어진다.:
클라이언트-서버 프로토콜에서 클라이언트는 연결을 수립한다.
HTTP에서 연결을 여는 것은 보통의 경우 TCP인 기본적인 전송 계층 내에서 연결을 수립하는 것을 뜻한다.
TCP를 이용할 경우 컴퓨터 상의 HTTP 서버를 위한 기본 포트는 80인데 8000 혹은 8080처럼 다른 포트들도 이용한다.
연결이 한번 수립되고 나면, 사용자-에이전트는 요청을 보낼 수 있다.
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: kr
헤더 블록으로부터 데이터 블록을 구분짓는 첫번째 빈줄에 주목하자.
헤더 중에 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 요청이 성공적으로 끝났는지 아닌지를 가르쳐준다.