|
短轮询 |
长轮询 |
Websocket |
Server-Sent Events |
通信协议 |
http |
http |
握手:http --> websocket |
http |
触发方式 |
Js Ajax |
Js Ajax |
事件 |
事件 |
优点 |
兼容性好容错性强,实现简单 |
比短轮询节约资源 |
全双工通讯协议,性能开销小、安全性高,有一定可扩展性 |
实现简便,开发成本低 |
缺点 |
页面会出现‘假死’, 不必要的网络传输 |
保持连接会消耗资源,服务器没有返回有效数据,程序超时 |
传输数据需要进行二次解析,增加开发成本及难度 |
只适用高级浏览器 |
适用范围 |
B/S服务 |
B/S服务 |
实时性高的应用 |
服务器向客户端推送 |
HTTP
HTTP
(HyperText Transfer Protocol
)超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层
协议.
- HTTP 是一个简单的
请求-响应
协议,是客户端和服务端之间请求和应答的标准,它通常运行在 TCP(传输控制协议)之上,由统一资源标识符(Uniform Resource Identifiers,URI 包含 URL 和 URN )来标识。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3604aeee2821017f7435819443226c7d.png)
HTTP请求过程
- URL匹配和DNS解析
- 建立TCP连接:三次握手
- 发送请求
- 请求报文分为请求行、请求头、空行和请求体,
- 服务端通过请求行和请求头中的内容获取客户端的信息,
- 通过请求体中的内容获取客户端传过来的数据
- 响应应答
- 响应报文由状态行、响应头、空行和响应体组成,
- 服务端通过状态行和响应头告诉客户端请求的状态和如何对数据处理等信息,
- 真正的数据则在响应体中传输给客户端。
- 断开TCP连接:四次挥手
1. 无状态
- HTTP请求是无状态的,即没有记忆功能,不能获取之前请求或响应的内容。
- 起初这种简单的模式,能够加快处理速度,保证协议的稳定,
- 但是随着应用的发展,这种无状态的模式会使我们的业务实现变得麻烦,
- 比如说需要保存用户的登录状态,就得专门使用数据库来实现。
- 于是乎,为了实现状态的保持,引入了Cookie技术来管理状态。
Cookie
- Server生成,Client/brower存储
- Client再次请求Server,携带Cookie,Server检查cookie
辨识用户
- Cookie就是服务器给用户颁布的一个状态值,并且保存在客户端或浏览器。只要在cookie的有效期内,用户再次访问该服务器时,浏览器会检查本地的cookies,并且会自动将cookie加在请求头部中一起发送给服务器,服务器通过识别该cookie来辨别用户身份,并且将用户在服务器中的资源提供给用户
Session
- Server生成,Server存储
- 保存用户的状态信息,
标示并跟踪用户
- Session、Cookie
关系
- cookie 是一个实际存在的、具体的东西,http 协议中定义在 header 中的字段。
- session 是一个抽象概念、开发者为了实现中断和继续等操作,将client和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
- 即session描述的是一种通讯会话机制,而cookie只是目前实现这种机制的主流方案里面的一个参与者,它一般是用于保存session ID。
1. 请求头
Accept:告诉服务器当前浏览器能接受和处理的介质类型,*/*表示可接受所有类型。
Accept-Encoding:告诉服务器当前浏览器支持的内容编码。
Accept-Language:告诉服务器当前浏览器能接受和处理的语言。上述请求中的zh-CN,zh;q=0.8表示用户对zh-CN的喜好程度为80%。
Connection:keep-alive,告诉服务器在完成本次请求的响应后,保持该TCP连接不释放,等待本次连接的后续请求。这样可以减少打开关闭TCP连接的次数提升处理性能。另外的可选项是Close,表明直接响应接受完成后直接将其关闭。
Content-Length:用于描述HTTP消息实体的传输长度。
Content-Type:内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
Cookie:表示服务器端为本次访问分配了一个Session ID,每次发送请求时都会主动将该Session ID通过Cookie字段又发送回服务器,用于验证身份和保持状态。
Host:描述请求将被发送的目的地,在任何类型的请求中都会包含此信息。
Origin:用来说明请求从哪里发起的。
Referer:指定发起该请求的源地址。根据该值服务器可以追踪到来访者的基本信息。比如我们在百度首页搜索博客园关键字,并从搜索结果中访问,那么博客园网站服务器就可以根据Referer值追踪到来访者地址为:https://www.baidu.com/link?url…7c64da001b54df0