HTTP 프로토콜의 특징
① Connectionless (↔ 소켓 통신의 커넥션 풀)
- 하나의 요청(request)에 대한 하나의 반응(response)을 한 후, 연결을 종료함
→ 새 요청이 있을 때마다 항상 새로운 연결을 맺음
② Stateless
- 통신이 끝난 후 상태 정보를 저장하지 않음
→ 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음
⇒ 웹 서버는 클라이언트를 기억할 수 없음 (쿠키 or 세션 필요)
쿠키 (Cookie)
- Key와 Value로 이뤄진 일종의 단위
- 서버에서 생성되어 클라이언트의 브라우저에 저장됨
→ 클라이언트가 다시 서버에 요청을 보낼 때 HTTP 메시지 헤더에 포함되는 정보
# 작동 방식
1. 서버가 클라이언트에게 쿠키를 발급함
2. 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 함께 전송함
3. 서버는 클라이언트의 요청에 포함된 쿠키를 확인해서 클라이언트를 구분함
# 용도
- 클라이언트의 정보 기록
: 각 클라이언트의 옵션을 기억하기 위해 쿠키에 저장해서 사용함
ex) 다시 보지 않기, 아이디 기억하기 등
- 상태 정보 표현
: 클라이언트를 식별할 수 있는 값을 쿠키에 저장해서 사용함
ex) 이용자 맞춤형 서비스
# 문제점
- 악의적으로 쿠키 정보를 변조해서 서버에 요청할 수 있다는 문제 발생
→ 보완 : 세션 (Session)을 이용한 식별
· 쿠키로는 주로 클라이언트의 중요하지 않은 정보를 저장/유지함
세션 (Session)
- 쿠키에 인증 상태를 저장하지만, 클라이언트가 인증 정보를 변조할 수 없게 함
# 작동 방식
1. 인증 정보를 서버에 저장함
2. 해당 데이터에 접근할 수 있는 키를 유추할 수 없는 랜덤한 문자열로 만들어 클라이언트에 전달함
: Session ID (최초 요청 시에만)
3. 브라우저는 해당 키를 쿠키에 저장하고, 이후에 HTTP 요청을 보낼 때 사용함
: HTTP 메시지 헤더에 포함됨
4. 서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인함
# JSESSIONID ★
- JSP/Servlet 컨테이너에서 사용되는 SESSIONID의 이름
- 클라이언트가 서버에 접속하면 웹 컨테이너는 해당 클라이언트와 연관된 HttpSession 객체를 생성함
→ JSESSIONID를 생성하여 클라이언트에게 전송함
→ 이후 클라이언트는 쿠키를 통해 JSESSIONID를 서버로 전송함
→ 해당 서버는 그 ID 값으로 클라이언트와 연관된 HttpSession 객체를 찾아서 처리함
'CS' 카테고리의 다른 글
[CS] 데이터 전송 포맷 : xml / JSON / yml (0) | 2023.05.11 |
---|---|
[HTTP] 상태 코드 (0) | 2023.04.10 |
[HTTP] MIME 타입 (0) | 2023.03.22 |
[HTTP] Web Server & WAS (Web Application Server) ★ (0) | 2023.03.22 |
[HTTP] 웹 브라우저와 웹 렌더링 (0) | 2023.03.22 |