íë¡í ì½ ì ê·¸ë ì´ë ë©ì»¤ëì¦
HTTP/1.1 íë¡í ì½ì Upgrade í¤ë íë를 ì¬ì©íì¬ ì´ë¯¸ ì¤ì ë ì°ê²°ì ë¤ë¥¸ íë¡í ì½ë¡ ì
ê·¸ë ì´ëíëë° ì¬ì©í ì ìë í¹ë³í ë©ì»¤ëì¦ì ì ê³µí©ëë¤.
ì´ ë©ì»¤ëì¦ì ì íì¬íì¼ë¡ íë¡í ì½ ë³ê²½ì ê°ì íëë° ì¬ì©í ì ììµëë¤. 구íì²´ë ìë¡ì´ íë¡í ì½ì ì§ìíëë¼ë ì ê·¸ë ì´ë를 ì´ì©íì§ ìëë¡ ì íí ì ìì¼ë©°, ì¤ì ë¡ ì´ ë©ì»¤ëì¦ì ëë¶ë¶ ì¹ìì¼ ì°ê²°ì ë¶í¸ì¤í¸ë©íëë° ì¬ì©ë©ëë¤.
ëí HTTP/2ë ì´ ë©ì»¤ëì¦ì ì¬ì©ì ëª ìì ì¼ë¡ íì©íì§ ìê³ , HTTP/1.1ììë§ ëª ìì ì¼ë¡ íì©í©ëë¤.
HTTP/1.1 ì°ê²° ì ê·¸ë ì´ë
Upgrade í¤ë íëë í´ë¼ì´ì¸í¸ê° ìë²ìê² ì°ì ììê° ë´ë¦¼ì°¨ìì¼ë¡ ëì´ë íë¡í ì½ ì¤ íëë¡ ì íí ê²ì ìì²íëë° ì¬ì©ë©ëë¤.
Upgradeë hop-by-hop í¤ëì´ë¯ë¡ Connection í¤ë íëë ìì±í´ì¼ í©ëë¤. ë°ë¼ì Upgrade를 í¬í¨íë ì¼ë°ì ì¸ ìì²ì ë¤ìê³¼ ê°ìµëë¤.
GET /index.html HTTP/1.1
Host: www.example.com
Connection: upgrade
Upgrade: example/1, foo/2
ìì²ë íë¡í ì½ì ë°ë¼ ë¤ë¥¸ í¤ëê° íìí ìë ììµëë¤. ì를 ë¤ì´ ì¹ìì¼ ì ê·¸ë ì´ëë ì°ê²°ì ì´ ë ì´ë ì ëì ë³´ìì ì ê³µí ë¿ë§ ìëë¼ ì¹ìì¼ ì°ê²°ì ëí ì¸ë¶ì ì¸ ë´ì©ì 구ì±íë걸 íë½í©ëë¤. ìì¸í ë´ì©ì ì¹ìì¼ ì°ê²°ë¡ ì ê·¸ë ì´ëí기를 참조íì¸ì.
ìë²ê° ì°ê²°ì ì
ê·¸ë ì´ëíê¸°ë¡ ê²°ì íë¤ë©´, ì í ì¤ì¸ íë¡í ì½ì ì§ì íë Upgrade í¤ë를 í¬í¨í 101 Switching Protocols ìëµ ìí를 ë¤ì ë³´ë
ëë¤. ë§ì½ ì°ê²°ì ì
ê·¸ë ì´ëíì§ ëª»íê±°ë ì
ê·¸ë ì´ëí ì ìë ê²½ì°, Upgrade í¤ëë 무ìíê³ 200 OKì ê°ì ì¼ë° ìëµì ë³´ë
ëë¤.
ìë²ë 101 ìí ì½ë를 ë³´ë¸ ì§í ìë¡ì´ íë¡í ì½ë¡ íµì ì ììí ì ìì¼ë©°, íìí ê²½ì° íë¡í ì½ë³ ì¶ê°ì ì¸ í¸ëì
°ì´í¬ë¥¼ ìíí©ëë¤. ì
ê·¸ë ì´ëë ìëµì´ ìë£ëë©´ ì°ê²°ì ì¬ì¤ì ìë°©í¥ íì´íë¼ì¸ì´ ëê³ , ì
ê·¸ë ì´ë를 ììí ìì²ì ìë¡ì´ íë¡í ì½ì íµí´ ìë£í ì ììµëë¤.
ì´ ë©ì»¤ëì¦ì ì¼ë°ì ì¸ ì¬ì© ë°©ë²
ì¬ê¸°ìë Upgrade í¤ëì ê°ì¥ ì¼ë°ì ì¸ ì¬ì© ì¬ë¡ì ëí´ ì´í´ë´
ëë¤.
ì¹ìì¼ ì°ê²°ë¡ ì ê·¸ë ì´ëí기
íì¬ê¹ì§ HTTP ì°ê²°ì ì ê·¸ë ì´ëíë ê°ì¥ ì¼ë°ì ì¸ ì¬ì© ì¬ë¡ë ì¹ìì¼ì ì¬ì©íë ê²ì ëë¤. ì¹ìì¼ì íì HTTP, HTTPS ì°ê²°ì ì ê·¸ë ì´ëíì¬ êµ¬íë©ëë¤. ë§ì½ ì¹ìì¼ API ëë ì¹ìì¼ì ì¬ì©íë ë¤ë¥¸ ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©í´ì ìë¡ì´ ì°ê²°ì ì´ê² ëë¤ë©´ ì´ë¬í ê³¼ì ëë¶ë¶ ëë ì ë¶ê° ì²ë¦¬ëë¤ë ì ì 기ìµí´ ëì¸ì. ì를 ë¤ì´ ì¹ìì¼ ì°ê²°ì ì¬ë ê²ì ë¤ìê³¼ ê°ì´ ê°ë¨í©ëë¤.
webSocket = new WebSocket("ws://destination.server.ext", "optionalProtocol");
WebSocket() ìì±ìë ì´ê¸° HTTP/1.1 ì°ê²°ì ìì±íê³ , í¸ëì
°ì´í¹ê³¼ ì
ê·¸ë ì´ë íë¡ì¸ì¤ë¥¼ ì²ë¦¬íë 모ë ìì
ì ìíí©ëë¤.
ì°¸ê³ :
"wss://" URL ì¤í¤ë§ë¥¼ ì¬ì©íì¬ ë³´ì ì¹ìì¼ ì°ê²°ì ì´ ì ììµëë¤.
ë§ì½ ì¹ìì¼ ì°ê²°ì ì²ìë¶í° ë§ë¤ì´ì¼ íë¤ë©´ í¸ëì
°ì´í¬ ê³¼ì ì ì§ì ì²ë¦¬í´ì¼ í©ëë¤. ì´ê¸° HTTP/1.1 ì¸ì
ì ë§ë íìë ë¤ìê³¼ ê°ì´ íì¤ ìì²ì Upgradeì Connection í¤ë를 ì¶ê°íì¬ ì
ê·¸ë ì´ë를 ìì²í´ì¼ í©ëë¤.
Connection: Upgrade
Upgrade: websocket
ì¹ìì¼ ê´ë ¨ í¤ë
ë¤ì í¤ëìë ì¹ìì¼ ì
ê·¸ë ì´ë íë¡ì¸ì¤ì ê´ë ¨ëì´ ììµëë¤. Upgradeì Connection í¤ë를 ì ì¸í ëë¨¸ì§ í¤ëë ì¼ë°ì ì¼ë¡ ë¸ë¼ì°ì ì ìë²ê° ìë¡ íµì í ë ì íì ì¼ë¡ ì²ë¦¬ë©ëë¤.
Sec-WebSocket-Extensions
ìë²ê° ì¬ì©íëë¡ ìì²í 1ê° ì´ìì íë¡í ì½ ìì¤ ì¹ìì¼ íì¥ì를 ì§ì í©ëë¤. íëì ìì²ìì ì¬ë¬ ê°ì Sec-WebSocket-Extension í¤ë를 ì¬ì©íë ê²ì´ íì©ëë©°, ëì´ë 모ë íì¥ìë íëì í¤ëì í¬í¨í ê²ê³¼ ê²°ê³¼ê° ê°ìµëë¤.
Sec-WebSocket-Extensions: extensions
extensions-
ìì²í íì¥ì 목ë¡ì ì¼íë¡ êµ¬ë¶í ì ììµëë¤. íì¥ì ì´ë¦ì IANA ì¹ìì¼ íì¥ì ì´ë¦ ë ì§ì¤í¸ë¦¬ìì ì íí´ì¼ í©ëë¤. 매ê°ë³ì를 ì¬ì©íë íì¥ìë ì¸ë¯¸ì½ë¡ ì¼ë¡ 구ë¶í©ëë¤.
Sec-WebSocket-Extensions: superspeed, colormode; depth=16
Sec-WebSocket-Key
í´ë¼ì´ì¸í¸ê° ì¹ìì¼ì¼ë¡ ì ê·¸ë ì´ë를 ìì²í ìê²©ì´ ìëì§ íì¸íëë° íìí ì 보를 ìë²ì ì ê³µí©ëë¤. ì´ í¤ëë ìì íì§ ìì HTTP í´ë¼ì´ì¸í¸ê° ì ê·¸ë ì´ë를 ìí ë ì¬ì©í ì ìì¼ë©°, ì ì©ì ëë¹í´ ì½ê°ì ë³´ìì ì ê³µí©ëë¤. í¤ì ëí ê°ì ì¹ìì¼ ëª ì¸ìì ì ìë ìê³ ë¦¬ì¦ì¼ë¡ ê³ì°ëë¯ë¡ ë³´ìì ì ê³µíì§ ììµëë¤. ëì , ì¹ìì¼ì´ ìë í´ë¼ì´ì¸í¸ê° ë¶ì£¼ìë ì¤ì©ì¼ë¡ ì¹ìì¼ ì°ê²° ìì²ì ë°©ì§íëë° ëìì´ ë©ëë¤. 본ì§ì ì¼ë¡ ì´ í¤ë "ë¤, ì ë ì¹ìì¼ ì°ê²°ì ì´ë ¤ê³ í©ëë¤."ë¼ë ê²ì íì¸í©ëë¤.
ì´ í¤ëë ì¬ì©ì ì íí í´ë¼ì´ì¸í¸ì ìí´ ìëì¼ë¡ ì¶ê°ëë©°, fetch() ëë XMLHttpRequest.setRequestHeader() ë©ìë를 ì¬ì©íì¬ ì¶ê°í ì ììµëë¤.
Sec-WebSocket-Key: key
key-
ìì²ì ì ê·¸ë ì´ëí기 ìí í¤ì ëë¤. í´ë¼ì´ì¸í¸ë ì¹ìì¼ì¼ë¡ ì ê·¸ë ì´ë를 ìíë¤ë©´ í´ë¹ í¤ë¥¼ ìì²ì ì¶ê°í¨ì¼ë¡ì¨, ìë²ë ìì²´ í¤ë¥¼ ìëµì í¬í¨íê³ , í´ë¼ì´ì¸í¸ë ì ê·¸ë ì´ë ìëµì ì ë¬í기 ì ì ìë²ìì ë°ì í¤ë¥¼ ê²ì¦í©ëë¤.
ìë² ìëµì ìë Sec-WebSocket-Accept í¤ëë ì§ì ë key를 기ë°ì¼ë¡ ê³ì°ë ê°ì ê°ì§ëë¤.
Sec-WebSocket-Protocol
Sec-WebSocket-Protocol í¤ëë ì¬ì©íê³ ì íë ì¬ë¬ ê°ì ì¹ìì¼ íë¡í ì½ì ì í¸íë ììëë¡ ì§ì í©ëë¤. ìë²ë ì§ìíë 첫 ë²ì§¸ íë¡í ì½ì ì ííê³ , ìëµì Sec-WebSocket-Protocol í¤ëë¡ ë°íí©ëë¤. ì´ í¤ëë ì¬ë¬ë² ì¬ì©í ì ìì¼ë©°, íëì í¤ëì ì¼íë¡ êµ¬ë¶íì¬ íì íë¡í ì½ ìë³ì 목ë¡ì ìì±íë ê²ê³¼ ê²°ê³¼ê° ê°ìµëë¤.
Sec-WebSocket-Protocol: subprotocols
subprotocols-
ì í¸íë ììì ë°ë¼ ì¼íë¡ êµ¬ë¶ë íì íë¡í ì½ ì´ë¦ 목ë¡ì ëë¤. íì íë¡í ì½ì IANA ì¹ìì¼ íì íë¡í ì½ ì´ë¦ ë ì§ì¤í¸ë¦¬ìì ì ííê±°ë, í´ë¼ì´ì¸í¸ì ìë² ëª¨ë ì´í´íë ì¬ì©ì ì ì ì´ë¦ì¼ ìë ììµëë¤.
Sec-WebSocket-Version
ìì² í¤ë
í´ë¼ì´ì¸í¸ë ì¬ì©í길 ìíë ì¹ìì¼ íë¡í ì½ ë²ì ì ì§ì íì¬ ìë²ìì í´ë¹ ë²ì ì´ ì§ìëëì§ íì¸í ì ììµëë¤.
Sec-WebSocket-Version: version
version-
í´ë¼ì´ì¸í¸ê° ìë²ì íµì í ë ì¬ì©í길 ìíë ì¹ìì¼ íë¡í ì½ ë²ì ì ëë¤. ë²ì ë²í¸ë IANA ì¹ìì¼ ë²ì ë²í¸ ë ì§ì¤í¸ë¦¬ì ëì´ë ê°ë¥í ìµì ë²ì ì´ì´ì¼ í©ëë¤. ì¹ìì¼ íë¡í ì½ì ê°ì¥ ìµê·¼ì ìµì¢ ë²ì ì 13 ë²ì ì ëë¤.
ìëµ í¤ë
ìë²ê° ì§ì ë ì¹ìì¼ íë¡í ì½ ë²ì ì ì¬ì©í´ íµì í ì ìë¤ë©´, 426 Upgrade Required ê°ì ìë¬ì í¨ê» ì§ìíë íë¡í ì½ ë²ì 목ë¡ì ì¼íë¡ êµ¬ë¶í Sec-WebSocket-Version í¤ë를 í¬í¨íì¬ ìëµí©ëë¤. ë§ì½ ìë²ê° ìì²ë íë¡í ì½ ë²ì ì ì§ìíë¤ë©´, ìëµ ìì Sec-WebSocket-Version í¤ëê° í¬í¨ëì§ ììµëë¤.
Sec-WebSocket-Version: supportedVersions
supportedVersions-
ìë²ê° ì§ìí ì ìë ì¹ìì¼ íë¡í ì½ ë²ì ì ì¼íë¡ êµ¬ë¶í 목ë¡ì ëë¤.
ìëµ ì ì© í¤ë
ìë² ìëµìë ìë ë´ì©ì´ í¬í¨ë ì ììµëë¤.
Sec-WebSocket-Accept
ìë²ìì ì¹ìì¼ ì°ê²°ì ììí ë ì¤íë í¸ëì °ì´í¬ë¥¼ ì²ë¦¬íë ëì ìë² ìëµ ë©ìì§ì í¬í¨ë©ëë¤. ì´ í¤ëë ìëµ í¤ëì í ë²ë§ íìë©ëë¤.
Sec-WebSocket-Accept: hash
hash-
Sec-WebSocket-Keyí¤ëê° ì ê³µëë¤ë©´, ì´ í¤ëì ê°ì í¤ê°ì ê°ì ¸ì 문ìì´ "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"ì ì°ê²°íê³ , ì°ê²°ë 문ìì´ì SHA-1 í´ì를 ê³ì°íì¬ 20ë°ì´í¸ ê°ì ìì±í´ 결과를 ê³ì°í©ëë¤. ê·¸ë° ë¤ì í´ë¹ ê°ì base64ë¡ ì¸ì½ë©íì¬ ì´ ìì±ì ê°ì ì»ê² ë©ëë¤.
ì°¸ê³ ì
- ì¹ìì¼ API
- HTTP
- RFC ëª ì¸ì: