解说http,https,websocket三者协议以及关系
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
最近一直在折腾websocket,折腾来折腾去各种的问题,现在记录一下,以备自己以后的之需,
http
什么是http
Hyper Text Transfer Protocol 超文本传输协议
建立在TCP上无状态的连接
客户端发送一个HTTP请求到服务器,服务器接收后开始处理请求并根据
请求访问服务器资源,最后通过HTTP响应把结果返回给客户端
http请求
状态行 请求方式Method(get/post/put/delete)、资源路径URL、
协议版本Version
请求头 访问的域名、用户代理、Cookie等信息
请求正文 HTTP请求的数据
http响应
状态行 协议版本Version、状态码Status Code、回应短语
响应头 搭建服务器的软件,发送响应的时间,回应数据的格式等信息
响应正文 响应的具体数据
状态码
1xx 请求已接收继续处理请求
2xx 请求已经处理完成(200--请求正常处理完成)
3xx 请求访问的URL重定向到其他目录
301--请求永久重定向;
302--请求临时重定向;
304--请求被重定向到客户端本地缓存
4xx 客户端出现错误
400--客户端请求存在语法错误;
401--请求没经过授权;
403--请求被服务器端拒绝,客户端无访问权限;
404--URL在服务端不存在
5xx 服务端出现错误
500--服务端永久错误;503--服务端发生临时错误
响应模式
单进程I/O模型 一进程仅处理一个请求,对请求顺序处理
多进程I/O模型 多进程,同事处理多个请求
复用I/O模型 一个进程多个线程,一个线程响应一个请求,
可以达到同时处理多个请求,线程并发执行
复用多线程I/O模型 多个进程多个线程
https
什么是https
http的安全版,http下加入SSL层,https安全基础是SSL,加密的详细内容需要SSL主要作用
1.建立一个信息安全通道,保证数据传输的安全
2.确认网站的真实性原理、步骤
客户端使用https的url访问web服务器,要求与服务器建立SSL连接
服务器收到客户端请求后,会将网站的证书信息(证书包含公钥)传送一份给客户端
客户端的浏览器和服务器开始协商SSL连接的安全等级,即信息加密等级
客户端的里浏览器根据双方同意的安全等级建立会话秘钥,利用网站公钥将会话秘钥加密并传送给网站
web服务器利用自己的私钥解密出会话的秘钥
服务器利用会话秘钥加密与客户端之间的通信优点
可认证用户和服务器,确保数据 发送到正确 的客户机和服务器
防止数据在传输过程中不被窃取改变 保证数据的完整性
虽不是绝对安全的,但大幅度 增加了中间人的成本
比起同等http网站,采用https加密的网站在 搜索 结果中 排名会更高缺点
握手阶段较 费时,使页面加载时间延长50%,增加10%到20%的耗电
https连接缓存 不 如http 高效,增加数据开销和功耗,已有的安全措施也会因此受到影响
SSL证书 需要钱,功能越强证书费用越高,个人网站小网站没必要一般不会用
SSL证书 需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗
加密范围有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
websocket
什么是websocket
是一种网络通信协议,与http没有关系,是http的一种补充
HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议为什么用Websocket
http协议是一种无状态、无连接、单向的应用层协议
请求/响应模型。只能由客户端发起请求,服务端对请求做出应答处理
HTTP协议无法实现服务器主动向客户端发起信息
websocket允许客户端和服务器之间进行全双工通信,任何一方都可以通过建立的连接将数据推送到另一端。
只需要建立一次连接就可以一直保持连接状态,比轮询方式效率高客户端使用
var Socket = new WebSocket(url,[protocol]);属性
Socket.readyState
连接状态
0:尚未建立;
1:建立,可以进行通信;
2:连接正在关闭;
3:连接已经关闭或者连接不能打开
Socket.bufferedAmount
已被send()放入正在队列中等待传输,但是还没有发出的UTF-8文本字节数事件
Socket.onopen 连接建立时触发
Socket.onmessage 客户端接收服务端数据时触发
Socket.onerror 通信发生错误时触发
Socket.onclose 连接关闭时触发方法
Socket.send() 使用连接发送数据
Socket.close() 关闭连接
var ws = new WebSocket("ws://localhost:9998/echo");
ws.onopen = function () { // 使用 send() 方法发送数据
ws.send("发送数据");
alert("数据发送中...");
};
ws.onmessage = function (evt) { // 接收服务端数据时触发事件
var received_msg = evt.data;
alert("数据已接收...");
};
ws.onclose = function () { // 断开 web socket 连接成功触发事件
alert("连接已关闭...");
};
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!