[CS] HTTP(1) - HTTP의 특징, Connectionless, Stateless

·2023년 10월 22일
0

CS

목록 보기
1/3

📁HTTP (Hyper Transfer Protocol)

  • 서버/클라이언트 간 웹페이지 같은 자원을 주고받을 때 쓰는 통신 규약
  • WWW 상에서 웹페이지나 이미지 같은 정보를 요청과 응답에 의해 주고받는 프로토콜

📁HTTP 특징

1. Request & Response

- 클라이언트가 서버로 HTTP 요청 보내면 서버는 요청에 대한 결과를 만들어서 응답

2. Connectionless (비연결성)

- 클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 
서버가 응답을 마치면 맺었던 연결을 끊어버리는 성질
  • 장점: 연결 유지를 위한 리소스를 줄이면 더 많은 연결을 할 수 있음
  • 단점: 서버는 클라이언트를 기억하고 있지 않기 때문에, 매번 새로운 연결을 시도/해제의 과정을 거쳐야하므로 연결 및 해제에 대한 오버헤드 발생

3. Stateless (무상태)

클라이언트: 전에 뭘 보냈었지? 
서버: 전에 뭘 보냈었지?
  • HTTP에서 요청을 보낼 때 마다 새로운 응답이 생성
  • 클라이언트와 서버가 서로 연결되어 있는 것이 아니기 때문에 각각의 통신이 독립적
  • 서버가 클라이언트의 상태를 유지하지 않기 때문에 요청을 보낼 때마다 모든 데이터를 매번 보내야함
  • 클라이언트가 서버에 요청할 때 데이터를 담아서 보내기 때문에 아무 서버나 호출해도 됨


Connectionless 단점 극복 - KeepAlive

  • 오버헤드를 줄이기 위해 HTTP1.1에서 KeepAlive 제공하여 한번에 여러 요청-응답 가능
  • 지정된 시간동안 서버와 클라이언트 사이에서 패킷 교환이 없을 경우, 상대방의 안부를 묻기 위해 패킷을 주기적으로 전송 → 이때 반응이 없으면 접속을 끊게 됨
    • 주기적으로 클라이언트의 상태를 체크 → 근본적인 해결책 X


🍪 stateless이기 때문에, 상태값을 사용할 수 없음 → 단점보완 / 대안책?

  • 쿠키(Cookie): 서버에서 응답으로 보내진 Set-Cookie 라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 됨
    • 클라이언트가 다음번에도 같은 서버로 요청을 보내면 자동적으로 쿠키를 싣어서 송신하고, 서버는 클라이언트가 같이 보낸 쿠키를 통해 상태를 관리하고 체크하여 그에 맞는 응답을 보냄

Stateless 단점 극복 - (2) Session

🌐 쿠키는 사용자 정보가 브라우저에 저장되기 때문에 보안에 취약함 → 단점보완

  • 세션(Session): 브라우저가 아닌 서버에서 사용자 정보를 저장하는 구조
    • 서버의 메모리를 차지하게 되고, 만약 동시 접속자 수가 많은 서비스의 경우, 서버 과부화의 원인이 될 수 있음

👀쿠키와 세션 비교(상대적)

CookieSession
보안취약쿠키보다 나음
속도빠름느림
종료브라우저 종료 시 남아있음만료 시간에 상관없이 브라우저 종료 시 삭제

Stateless 단점 극복 - (3) Token 사용 (OAuth, JWT)

🔒 쿠키와 세션의 단점보완

  • Token 기반의 인증 방식 : 보호할 데이터를 토큰으로 치환하여 원본 데이터 대신 토큰 사용
    • 중간에 공격자로부터 토큰이 탈취당하더라도 데이터에 대한 정보를 알 수 없으므로, 보안성이 높음
    • 대표적으로는 OAuth와 JWT이 있습니다.

0개의 댓글