你們好,最近小未來發(fā)現(xiàn)有諸多的小伙伴們對于websocket與http區(qū)別,websocket這個問題都頗為感興趣的,今天小活為大家梳理了下,一起往下看看吧。
【資料圖】
1、jquery
2、首先了解一下Websocket的jqueryAPI。
3、/*申請一個WebSocket對象,參數(shù)是要連接的服務(wù)器的地址。就像http協(xié)議以http://開頭一樣,WebSocket協(xié)議的URL以ws://開頭。
4、此外,安全WebSocket協(xié)議以wss://開頭。*/
5、varws=newWebSocket("ws://echo .websocket .org”);
6、//如果鏈接成功,會觸發(fā)ws.onopen事件。
7、ws。on open=function(){ ws。發(fā)送(“測試!”);};
8、//如果服務(wù)器發(fā)送消息,就會觸發(fā)ws.onopen事件。
9、ws.onmessage=function(evt){alert(evt.data)};
10、//關(guān)閉事件
11、ws。關(guān)閉時=功能(evt){控制臺。log(" WebSocket關(guān)閉!");};
12、//錯誤事件
13、ws。on error=function(evt){控制臺。log(" WebSocketError!");};
14、//java
15、package com.byteslounge.websockets;
16、import java.io.IOException;
17、import javax.websocket.OnClose;
18、import javax.websocket.OnMessage;
19、import javax.websocket.OnOpen;
20、import javax.websocket.Session;
21、import javax.websocket.server.ServerEndpoint;
22、//下面url的地址。
23、//比如:http://127.0.0.1/websocket,可以直接訪問。
24、@ServerEndpoint("/websocket")
25、public class WebSocketTest {
26、//
27、@OnMessage
28、public void onMessage(String message, Session session)
29、throws IOException, InterruptedException {
30、//session session,不是帶有httpSession的會話。
31、session.getBasicRemote()。 Send text (message" this information has been forwarded by the server");
32、}
33、//當(dāng)用戶進入時觸發(fā)此事件。
34、@OnOpen
35、public void onOpen() {
36、System.out.println("Client connected");
37、}
38、//我就不解釋了。
39、@OnClose
40、public void onClose() {
41、System.out.println("Connection closed");
42、}
43、}
44、WebSocket和Socket可以連接,但是需要驗證。以下是驗證的方法(握手階段,以下內(nèi)容來自h-t-t-p://jinnianshilongnian . iteye . com/blog/1896756)。
45、在開放階段握手的目的是為了兼容基于HTTP的服務(wù)器軟件和中間件,以便單個端口可以用于與服務(wù)器通信的HTTP客戶端和與服務(wù)器通信的WebSocket客戶端。最后,
46、WebSocket客戶端的握手是一個HTTP升級請求:
47、 GET /chat HTTP/1.1
48、 Host: server.example.com
49、 Upgradewebsocket
50、 Connection: Upgrade
51、 Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
52、 Origin: http://example.com
53、 Sec-WebSocket-Protocol: chat, superchat
54、 Sec-WebSocket-Version: 13
55、根據(jù)[RFC2616],握手中的報頭字段可以由客戶端以任何順序發(fā)送,因此接收到的不同報頭字段中的順序并不重要。
56、“請求-URI”[RFC 2616]的GET方法用于標(biāo)識WebSocket連接的端點,即允許一個IP地址服務(wù)多個域名,一臺服務(wù)器服務(wù)多個WebSocket端點。
57、 客戶端按照[RFC2616]在它的握手的|Host|頭字段中包含主機名,以便客戶端和服務(wù)器都都能驗證他們同意哪一個正在使用的主機。
58、在WebSocket協(xié)議中另外的頭字段可以用于選擇選項。
59、典型的選項在這個版本中可用的是子協(xié)議選擇器(|Sec-WebSocket-Protocol|)、客戶端支持的擴展列表(|Sec-WebSocket-Extensions|)、|Origin|頭字段等。
60、|Sec-WebSocket-Protocol|請求頭字段可以用來表示客戶端接受的子協(xié)議(WebSocket協(xié)議上的應(yīng)用級協(xié)議層)。服務(wù)器選擇一個可接受的協(xié)議或不,
61、并在它的握手中回應(yīng)該值表示它已經(jīng)選擇了那個協(xié)議。
62、 Sec-WebSocket-Protocol: chat
63、|Origin|頭字段[RFC6454]是用于保護防止未授權(quán)的被瀏覽器中的使用WebSocket API的腳本跨域使用WebSocket服務(wù)器。服務(wù)器收到WebSocket連接請求生成的腳本來源。
64、如果服務(wù)器不想接受來自此來源的連接,它可以選擇通過發(fā)送一個適當(dāng)?shù)腍TTP錯誤碼拒絕該連接。這個頭字段由瀏覽器客戶端發(fā)送,對于非瀏覽器客戶端,如果它在這些客戶端上下文中有意義,這個頭字段可以被發(fā)送。
65、最后,服務(wù)器要證明收到客戶端WebSocket握手的客戶端,以便服務(wù)器不接受不是WebSocket連接的連接。
66、這可以防止一個通過使用XMLHttpRequest [XMLHttpRequest]或一個表單提交發(fā)送它精心制作的包欺騙WebSocket服務(wù)器的攻擊者。
67、為了證明收到的握手,服務(wù)器必須攜帶兩條信息并組合他們形成一個響應(yīng)。
68、第一條信息源自客戶端握手中的| Sec-WebSocket-Key |頭信息: Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
69、對于這個頭字段,服務(wù)器必須攜帶其值(出現(xiàn)在頭字段上,如,減去開頭和結(jié)尾空格的base64-編碼[RFC4648]的版本)并將這個與字符串形式的全局唯一標(biāo)識符(GUID,
70、[RFC4122])“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”連接起來,其不太可能被不理解WebSocket協(xié)議的網(wǎng)絡(luò)端點使用。
71、SHA-1散列(160位)[FIPS.180-3]、base-64編碼(參見[RFC4648]第4章)、用于這個的一系列相關(guān)事物接著在服務(wù)器握手過程中返回。
72、服務(wù)器將連接字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”形成字符串“dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。
73、來自服務(wù)器的握手比客戶端握手更簡單。首行是一個HTTP Status-Line,具有狀態(tài)碼101:
74、 HTTP/1.1 101 Switching Protocols
75、101以外的任何狀態(tài)碼表示W(wǎng)ebSocket握手沒有完成且HTTP語義仍適用。頭信息遵照該狀態(tài)碼。
76、|Connection|和|Upgrade|頭字段完成HTTP升級。|Sec-WebSocket-Accept|頭字段表示服務(wù)器是否將接受該連接。如果存在,
77、這個頭字段必須包括客戶端在|Sec-WebSocket-Key|中現(xiàn)時發(fā)送的與預(yù)定義的GUID的散列。任何其他值不能被解釋為一個服務(wù)器可接受的連接。
78、 HTTP/1.1 101 Switching Protocols
79、 Upgrade: websocket
80、 Connection: Upgrade
81、 Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
82、這些字段由WebSocket客戶端為腳本頁面做檢查。如果|Sec-WebSocket-Accept|不能匹配盼望的值、如果頭字段缺失、或HTTP狀態(tài)碼不是101,則連接將不能建立,
83、且WebSocket幀將不發(fā)生。
84、可選的字段也可以被包含在內(nèi)。在這合格版本的協(xié)議中,主要可選字段是|Sec-WebSocket-Protocol|,其表示服務(wù)器選擇的子協(xié)議。
85、WebSocket客戶端驗證服務(wù)器包含的在WebSocket客戶端握手中指定的一個值。聲明多個子協(xié)議的服務(wù)器必須確保它選擇一個,基于客戶端握手并指定它在其握手中。
86、 Sec-WebSocket-Protocol: chat
87、服務(wù)器也可以設(shè)置cookie相關(guān)的可選字段為_set_cookies,描述在[RFC6265]。
以上就是websocket這篇文章的一些介紹,希望對大家有所幫助。
標(biāo)簽:
Copyright © 2015-2022 太平洋獸藥網(wǎng) 版權(quán)所有 備案號:豫ICP備2022016495號-17 聯(lián)系郵箱:93 96 74 66 9@qq.com