websocket介紹

HTTP是不支持持久鏈接的(長鏈接,循環鏈接的不算)    瀏覽器

看了《http權威指南》裏就能知道, 持久鏈接:在事務處理結束以後仍然保持在打開狀態的TCP鏈接被成爲持久鏈接。非持久鏈接會在每一個事務結束以後關閉,持久鏈接會在不一樣事務之間保持打開狀態,直到客戶端或服務器決定將其關閉爲止。   服務器

http解析urlsocket

  1. 瀏覽器解析出域名;
  2. 瀏覽器查詢這個主機名的IP地址;
  3. 瀏覽器得到端口號;
  4. 瀏覽器發起到主機名IP地址端口的80鏈接;
  5. 瀏覽器向服務器發送一條HTTP–GET報文;
  6. 瀏覽器從服務器讀取HTTP響應報文;

WebSocket是HTML5出的東西(協議),也就是說HTTP協議沒有變化,或者說不要緊.
首先HTTP有1.1和1.0之說,也就是所謂的keep-alive,把多個HTTP請求合併爲一個,可是Websocket實際上是一個新協議,跟HTTP協議基本沒有關係,只是爲了兼容現有瀏覽器的握手規範而已,也就是說它是HTTP協議上的一種補充能夠經過這樣一張圖理解url

Websocket是一個持久化的協議,相對於HTTP這種非持久的協議來講。spa

1) HTTP的生命週期經過Request來界定,也就是一個Request 一個Response,那麼HTTP1.0,此次HTTP請求就結束了。
在HTTP1.1中進行了改進,使得有一個keep-alive,也就是說,在一個HTTP鏈接中,能夠發送多個Request,接收多個Response。
可是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。並且這個response也是被動的,不能主動發起。code

 

首先Websocket是基於HTTP協議的,或者說借用了HTTP的協議來完成一部分握手生命週期

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

首先,Sec-WebSocket-Key 是一個Base64 encode的值,這個是瀏覽器隨機生成的,告訴服務器:泥煤,不要忽悠窩,我要驗證尼是否是真的是Websocket助理。
而後,Sec_WebSocket-Protocol 是一個用戶定義的字符串,用來區分同URL下,不一樣的服務所須要的協議。簡單理解:今晚我要服務A,別搞錯啦~
最後,Sec-WebSocket-Version 是告訴服務器所使用的Websocket Draft(協議版本),在最初的時候,Websocket協議還在 Draft 階段,各類奇奇怪怪的協議都有,並且還有不少期奇奇怪怪不一樣的東西,什麼Firefox和Chrome用的不是一個版本之類的,當初Websocket協議太多但是一個大難題。。不過如今還好,已經定下來啦~你們都使用的一個東西~ 脫水:服務員,我要的是13歲的噢→_→

而後服務器會返回下列東西,表示已經接受到請求, 成功創建Websocket啦!事務

相關文章
相關標籤/搜索