본문 바로가기
Back_end/node.js

node.js) http 프로토콜과 웹소켓

by nomfang 2021. 5. 31.
728x90
반응형

http

  • 요청은 클라이언트만 가능 (html/js)
  • 한 번의 요청에는 한 번의 응답 (client 요청 server 응답)
  • 응답을 기다리는 동안 다른 작업 불가

-> 게임이나 채팅과 같은 양방향 통신, 다중 통신, 실시간 통신을 위해 웹 소켓 탄생

웹소켓

  • 구현이 복잡하다
  • 요청한 사람에게만 응답을 보내기 어려움
  • OSI7 계층에 위치하며 4계층의 TCP에 의존한다
  • HTTP가 http/https를 이용하듯 웹소켓은 ws/wss를 이용(끝 s는 보안 강화)

웹소켓 연결

  • http를 이용하여 연결 수립
  • 응답도 http로 온다
  • 웹소켓 연결 요청은 “Connection:Upgrade”와 “Upgrade:websocket” 헤더를 통해 웹소켓 요청임을 표시
  • “Sec-WebSocket-Key” 헤더를 통해 핸드쉐이크 응답을 검증할 키 값을 보낸다. 그 외에 WebSocket 연결시 보조로 이용할 프로토콜 정보등의 추가적인 정보를 헤더에 담아 보낼 수 있다
  • “Sec-WebSocket-Key” 헤더를 통해 받은 값에 특정 값을 붙인 후, SHA-1로 해싱하고 base64로 인코딩한 값을 “Sec-WebSocket-Accept”
    헤더에 보낸다
  • 정상 응답시 상태코드 101
  • 위와 같은 과정을 핸드 쉐이크 과정이라고 한다 -> 응답과 요청이 여러번 이루어지면서 서로의 key 값을 확인하는 과정
  • 핸드 쉐이크 과정이 끝나면 웹 소켓 프로토콜을 이용해 문자를 주고 받을 수 있는 연결 상태가 된다

서버 실행 listen을 app이 아닌 server로 해야함
-> 101코드를 받으면 연결 성공

연결 후

연결 후에는 메시지 주고 받아도
브라우저의 네트워크 상에서 요청과 응답을 주고받지 않는다
Headers가 아닌 Messages를 통해서 메시지를 주고 받음
-> 연결된 요청과 응답 안에서 메시지를 주고 받는 것

반응형

댓글