1. WebSocket
1.1 등장 배경
- 짧은주기로 서버에 데이터 요청시 매번 TCP연결(Connection)을 수행하야함
- 모든 클라이언트-서버 통신 메시지에 HTTP헤더를 가지게 됨으로 네트워크부하
이러한 문제들을 해결하기 위해 webSocket이 등장
1.2 HTTP polling
- 클라이언트에서 서버로 데이터 요청
- 서버로부터 응답
- 일정 주기로 반복 수행
- 요청과 응답이 있을 때마다 매번 새로운 연결 수행
1.3 WebSocket
- HTTP요청을 통해 WebSocket연결
- 연결후 클라이언트와 서버는 별도의 연결 작업없이 데이터를 주고 받음
- 서버와 클라이언트 모두 연결 종료 가능
2. WebSocket Frame
Text - UTF-8 Encoidng
OpCode(XOR적용) | frame type |
0 | Continuation |
1 | Text (UTF-8) |
2 | Binary |
3~7 | Reserved for further non-control frames |
8 | Connection Close |
9 | Ping |
10 | Pong |
11~15 | Reserved for further non-control frames |
3. WebSocket Handshake
3.1 요청정보
Connection : Upgrade - 연결 지속여부 전달
Upgrade : websocket - websocket프로토콜로 변경 요청
Sec-WebSocket-key : <key> - 클라이언트가 websocket프로토콜 업그레이드 요청할 권한이 있는지 확인
Sec-WebSocket-Version : <version> - websocket버전(최신13)
Sec-Websocket-Extensions : <extensions> - 클라이언트가 제공하는 확장 기능
Sec-Websocket-Protocol : <protocol> - 클라이언트가 상위 계층 프로토콜 협상
GET /chat HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: <http://localhost:9000>
3.2 응답정보
101 - Switching Protocols (Success)
404 - Bad Request
415 - Unsupported Media Type
Sec-WebSocket-Accept : <hashed key> - 서버가 websocket연결을 시작할 의사가 있음
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
4. 추가 사항
4.1 WS:// and WSS://
http://,https://의 차이점 처럼 WebSocket도 ws://, wss:// 와 같이 비 암호화 소켓과 암호화 소켓으로 나뉜다.
SMALL
'기초' 카테고리의 다른 글
JWT (0) | 2023.05.30 |
---|---|
[Python] Flask (0) | 2023.05.30 |
정규표현식[2] (0) | 2021.09.14 |
정규표현식[1] (0) | 2021.09.13 |