HTTP vs WebSockets

vancouver·2023년 8월 10일

HTTP:

  • Client(유저)가 request만 가능함
  • 서버가 기억하지못함.
  • 비연결성
  • 실시간 통신하기에 적합하지 않음.

WebSocket:

  • 웹에서 하나의 TCP 연결을 통해 양 방향 통신을 제공하는 컴퓨터 통신 프로토콜
  • 실시간 서비스를 구현하기에 적합한 기술
  • HTTP의 반이중(Half-Duplex)방식이 아닌 진짜 양방향 통신인 전이중(Full-Duplex)방식이다

Half-Duplex

: 양 방향 통신을 하지만 송수신을 동시에 할 수 없고, 무전기 방식처럼 해야한다

Full-Duplex

: 동시에 송수신을 하며 양 방향 통신을 할 수 있다

특징

  • 최초 접속이 일반 http 요청을 이용한 handshaking으로 이뤄진다

  • TCP socket은 바이트 스트림을 사용하지만, WEB socket은 UTF-8의 텍스트와 바이너리 둘다 보낼 수 있다

  • 텍스트의 경우 시작과 끝에 0x00과 0xFF를 붙여서 구분한다

    • Statefull
      서버와 클라이언트가 한번 연결되면 계속 같은 라인을 사용해 통신하므로 HTTP 사용시 필요없이 발생되는 HTTP와 TCP 연결 트래픽을 피할 수 있다
      웹소켓은 최초접속을 제외하면 헤더 정보를 보내지 않지만, HTTP 프로토콜은 요청을 할 때마다 헤더정보를 보내게 되므로 네트워크 비용에서 이득이다
  • HTTP 요청을 그대로 사용하므로 80, 443포트를 그대로 사용할 수 있고, HTTP의 규격인 CORS적용, 인증 등을 기존과 동일하게 이용할 수 있다

작동원리

  • 웹소켓 연결을 위해 http통신을 한다
  • handshake과정이 성공적으로 이뤄지면 HTTP → 웹 소켓 프로토콜로 변경하는 프로토콜 스위칭이 이뤄진다
  • 웹소켓을 위한 소켓이 생성되고 해당 소켓으로 전이중 통신을 한다
  • (소켓은 ws, wss 가 있다, http, https와 동일한 차이)

0개의 댓글