你们好,最近小未来发现有诸多的小伙伴们对于websocket与http区别,websocket这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、jquery
(资料图片仅供参考)
2、首先了解一下Websocket的jqueryAPI。
3、/*申请一个WebSocket对象,参数是要连接的服务器的地址。就像http协议以http://开头一样,WebSocket协议的URL以ws://开头。
4、此外,安全WebSocket协议以wss://开头。*/
5、varws=newWebSocket("ws://echo .websocket .org”);
6、//如果链接成功,会触发ws.onopen事件。
7、ws。on open=function(){ ws。发送(“测试!”);};
8、//如果服务器发送消息,就会触发ws.onopen事件。
9、ws.onmessage=function(evt){alert(evt.data)};
10、//关闭事件
11、ws。关闭时=功能(evt){控制台。log(" WebSocket关闭!");};
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、//当用户进入时触发此事件。
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可以连接,但是需要验证。以下是验证的方法(握手阶段,以下内容来自h-t-t-p://jinnianshilongnian . iteye . com/blog/1896756)。
45、在开放阶段握手的目的是为了兼容基于HTTP的服务器软件和中间件,以便单个端口可以用于与服务器通信的HTTP客户端和与服务器通信的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、根据[RFC2616],握手中的报头字段可以由客户端以任何顺序发送,因此接收到的不同报头字段中的顺序并不重要。
56、“请求-URI”[RFC 2616]的GET方法用于标识WebSocket连接的端点,即允许一个IP地址服务多个域名,一台服务器服务多个WebSocket端点。
57、 客户端按照[RFC2616]在它的握手的|Host|头字段中包含主机名,以便客户端和服务器都都能验证他们同意哪一个正在使用的主机。
58、在WebSocket协议中另外的头字段可以用于选择选项。
59、典型的选项在这个版本中可用的是子协议选择器(|Sec-WebSocket-Protocol|)、客户端支持的扩展列表(|Sec-WebSocket-Extensions|)、|Origin|头字段等。
60、|Sec-WebSocket-Protocol|请求头字段可以用来表示客户端接受的子协议(WebSocket协议上的应用级协议层)。服务器选择一个可接受的协议或不,
61、并在它的握手中回应该值表示它已经选择了那个协议。
62、 Sec-WebSocket-Protocol: chat
63、|Origin|头字段[RFC6454]是用于保护防止未授权的被浏览器中的使用WebSocket API的脚本跨域使用WebSocket服务器。服务器收到WebSocket连接请求生成的脚本来源。
64、如果服务器不想接受来自此来源的连接,它可以选择通过发送一个适当的HTTP错误码拒绝该连接。这个头字段由浏览器客户端发送,对于非浏览器客户端,如果它在这些客户端上下文中有意义,这个头字段可以被发送。
65、最后,服务器要证明收到客户端WebSocket握手的客户端,以便服务器不接受不是WebSocket连接的连接。
66、这可以防止一个通过使用XMLHttpRequest [XMLHttpRequest]或一个表单提交发送它精心制作的包欺骗WebSocket服务器的攻击者。
67、为了证明收到的握手,服务器必须携带两条信息并组合他们形成一个响应。
68、第一条信息源自客户端握手中的| Sec-WebSocket-Key |头信息: Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
69、对于这个头字段,服务器必须携带其值(出现在头字段上,如,减去开头和结尾空格的base64-编码[RFC4648]的版本)并将这个与字符串形式的全局唯一标识符(GUID,
70、[RFC4122])“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”连接起来,其不太可能被不理解WebSocket协议的网络端点使用。
71、SHA-1散列(160位)[FIPS.180-3]、base-64编码(参见[RFC4648]第4章)、用于这个的一系列相关事物接着在服务器握手过程中返回。
72、服务器将连接字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”形成字符串“dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。
73、来自服务器的握手比客户端握手更简单。首行是一个HTTP Status-Line,具有状态码101:
74、 HTTP/1.1 101 Switching Protocols
75、101以外的任何状态码表示WebSocket握手没有完成且HTTP语义仍适用。头信息遵照该状态码。
76、|Connection|和|Upgrade|头字段完成HTTP升级。|Sec-WebSocket-Accept|头字段表示服务器是否将接受该连接。如果存在,
77、这个头字段必须包括客户端在|Sec-WebSocket-Key|中现时发送的与预定义的GUID的散列。任何其他值不能被解释为一个服务器可接受的连接。
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状态码不是101,则连接将不能建立,
83、且WebSocket帧将不发生。
84、可选的字段也可以被包含在内。在这合格版本的协议中,主要可选字段是|Sec-WebSocket-Protocol|,其表示服务器选择的子协议。
85、WebSocket客户端验证服务器包含的在WebSocket客户端握手中指定的一个值。声明多个子协议的服务器必须确保它选择一个,基于客户端握手并指定它在其握手中。
86、 Sec-WebSocket-Protocol: chat
87、服务器也可以设置cookie相关的可选字段为_set_cookies,描述在[RFC6265]。
以上就是websocket这篇文章的一些介绍,希望对大家有所帮助。
标签:
仓储物流“成渝圈”如何乘势而上? 12月3日,连接昆明和万象的中老铁路全线开通运营,被惠及的显...
两件西周青铜簋时隔三千年成功配对 考古工作者介绍,这个铜簋的盖、身分别时隔40余年出土,纹饰...
“医保砍价”不是一个人在战斗 晁星 “我眼泪都快掉下来了”“每一个小群体都不该被放弃”…...
“购物成瘾”真的是一种病 刘艳 牛雅娟 本周日即将迎来“双十二”促销季,很多人又开始摩拳...
因迷恋山间风景,一男子在甘孜州稻城县海拔4000多米的无人区迷失方向,随后与同伴失联。12月的稻城...
嫌疑人DNA信息比中后,成都市公安局刑侦支队技术处DNA实验室民警白小刚一下坐在凳子上,恍惚迟疑间...
一批反映南京大屠杀历史的新书发布 新华社南京12月7日电(记者邱冰清、蒋芳)“以史为鉴,开创未来...
我在现场·照片背后的故事|电影《亲爱的》里面没有的结局,在我眼前“上映” 12月6日,在深圳市...
冥想?泡脚?不如听听助眠音乐 晚上睡不着,白天睡不醒,成为最贴合都市人群的“睡眠画像”。随...
养老话题 老年教育面临缺口 “终身教育”潜力无限 【现实挑战】“新老年”群体愿意在培养兴...
孙海洋被拐14年儿子如何找到的? 警方侦办另一宗拐骗儿童案时发现线索,通过人像比对、DNA确认找...
北京天文馆、圆明园将对未成年人免费开放 12月6日,北京天文馆发布通知称,12月8日起试行对未成...
今年全国粮食总产量再创新高 连续7年保持在1 3万亿斤以上 根据对全国31个省(区、市)的抽样调...
斑块软的很危险 硬的就无碍? 血管里的“垃圾”分类 赶快学起来! 一项最新研究显示:中国...
诺西那生钠注射液大幅降价 聚焦医保谈判背后脊髓性肌萎缩症家庭 医保目录公布那天 好多家长都...
抖音“窗花剪剪”遭抄袭 被判获赔20万元 法院认为“窗花剪剪”的这种表达方式理应受到《著作权...
公安机关近日侦破3起拐卖儿童案件 失散十几年 3组家庭终于团圆了 北京青年报记者12月6日从公...
2021年度十大网络用语发布 本报讯(记者 路艳霞)作为年度“汉语盘点”活动最具网络特色的组成部...
北京天文馆向未成年人免费开放 本报讯(记者 牛伟坤)北京天文馆对票价免费及优惠政策作出调整:1...
2021北京百个网红打卡地发布 本报讯(记者 李洋)2021北京网红打卡地推荐榜单昨晚正式发布。自然...