斗艳争妍の网络协议姐妹花http协议 VS websocket协议
Posted 谁吃薄荷糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斗艳争妍の网络协议姐妹花http协议 VS websocket协议相关的知识,希望对你有一定的参考价值。
http协议
http简介
- http
http(hypertext transfer protocol),“超文本传输协议”。
- 超文本
包含有超链接和各种多媒体元素标记的文本。常见的超文本格式html(超文本标记语言)。
- http协议
定义浏览器如何向web服务器发送请求,web服务器如何向浏览器进行响应。简言之,就是client端与server端进行数据传输的一种规则。
http工作原理
- 请求/响应模型
用户点击http://www.baidu.com/index.html后的流程:
- 分析链接
- 浏览器向dns请求分析www.baidu.com的ip
- dns将分析出的112.80.248.75返回给浏览器
- 浏览器与服务器建立tcp连接
- 浏览器向服务器请求:GET /index.html
- 服务器向浏览器回复:index.html内容
- 释放tcp连接
- 浏览器解析html元素并显示
简言之:建链->请求->响应->断开
- 连接方式
- 非持久连接:浏览器每一个请求都创建一个新连接,当响应完毕后,连接就被释放。
- 持久连接:一个连接中,可以进行多次请求和响应。服务器在发送响应后,并不立即释放连接,可继续使用。
- 无状态性
http协议本身不会对发送过的请求和响应的通讯状态进行持久化处理。
同一客户端(浏览器)第二次访问同一个web服务器时,服务端无法知道这个客户端是否曾经访问过。
无状态性保证了http协议的简单性,从而能够快速处理大量的事务,提高了效率。
通常使用cookie或附带其他参数(token)用来区分来源。
发展历程
- http/1.0
每个tcp连接只能发送一个请求。发送数据完毕,该连接就关闭,如果还要请求其他资源,就必须再新建一个连接。非标Connection:keep-alive
- http/1.1
- 持久连接(persistent connection):tcp连接默认不关闭,可以利用,无需声明Connection:keep-alive
- 管道机制(pipeline):在同一个tcp连接里,客户端可以同时发送多个请求。这样就进一步改进了http协议的效率。
- 字段(Content-Length):一个tcp连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-Length字段的作用,声明本次回应的数据长度。
- 分块传输编码
http报文结构(请求/响应报文结构)
请求报文和响应报文都是由以下4部分组成:
- 请求行/响应行
- 请求头/响应头
- 空行
- .消息主体(请求体/响应体)
http报文请求方法
方法 | 含义 |
---|---|
GET | 请求读取 |
POST | 请求添加 |
PUT | 存储 |
DELETE | 删除 |
HEAD | 请求信息首部 |
TRACE | 用于测试,要求服务器回收到请求 |
CONNECTION | 用于代理服务器 |
OPTION | 查询特定选项 |
http报文状态码
响应报文里的状态码:指明特定的请求是否被满足,如没有满足,给出原因。
状态码 | 含义 | 示例 |
---|---|---|
1xx | 通知信息 | 100:服务器正在处理客户端请求 |
2xx | 成功 | 200:请求成功 |
3xx | 重定向 | 301:重定向 |
4xx | 客户端错误 | 403:禁止的页面;404:未找到 |
5xx | 服务器错误 | 500:服务器内部错误 |
http协议短板
- 请求/响应模型
请求/响应模型:通信只能由客户端发起,服务端不能主动发送消息给客户端。
- 轮巡polling技术
客户端以一定时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务端的同步。其实大量的定时请求都是无效的,因为服务端数据并没有更新,相应地也导致了大量的带宽等资源浪费。
- 长轮询机制
http长轮询机制是指服务端收到请求后如果有数据,则立即响应请求;如果没有数据,就会停留一段时间,这段时间内,如果服务端请求的数据到了(数据查询完成等),就立刻响应;如果这段时间过后,还没有数据到达,则以空数据的形式响应http请求;若客户端收到的数据为空,会再次发送同样的http请求到服务端。
长轮询是对定时轮询的改进和提高,目的是为了降低无效的网络传输。
当服务端没有数据更新时,连接会保持一个时间周期,直到数据或者状态改变,或者时间周期到了,通过这个机制来减少无效的客户端与服务端的交互。
然而这种机制存在一个问题:当客户端以固定频率向服务器发起请求时,服务器的数据有可能还没更新,这样就会带来很多无效的网络传输。同时可能延时一个时间周期的情况。
- 流技术 http streaming
客户端发送获取数据更新请求到服务端时,服务端将保持该请求的响应数据流一直打开,只要有数据更新就实时地发送给客户端。