斗艳争妍の网络协议姐妹花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后的流程:

  1. 分析链接
  2. 浏览器向dns请求分析www.baidu.com的ip
  3. dns将分析出的112.80.248.75返回给浏览器
  4. 浏览器与服务器建立tcp连接
  5. 浏览器向服务器请求:GET /index.html
  6. 服务器向浏览器回复:index.html内容
  7. 释放tcp连接
  8. 浏览器解析html元素并显示

简言之:建链->请求->响应->断开

  • 连接方式
  1. 非持久连接:浏览器每一个请求都创建一个新连接,当响应完毕后,连接就被释放。
  2. 持久连接:一个连接中,可以进行多次请求和响应。服务器在发送响应后,并不立即释放连接,可继续使用。
  • 无状态性

http协议本身不会对发送过的请求和响应的通讯状态进行持久化处理。

同一客户端(浏览器)第二次访问同一个web服务器时,服务端无法知道这个客户端是否曾经访问过。

无状态性保证了http协议的简单性,从而能够快速处理大量的事务,提高了效率。

通常使用cookie或附带其他参数(token)用来区分来源。

发展历程

  • http/1.0

每个tcp连接只能发送一个请求。发送数据完毕,该连接就关闭,如果还要请求其他资源,就必须再新建一个连接。非标Connection:keep-alive

  • http/1.1
  1. 持久连接(persistent connection):tcp连接默认不关闭,可以利用,无需声明Connection:keep-alive
  2. 管道机制(pipeline):在同一个tcp连接里,客户端可以同时发送多个请求。这样就进一步改进了http协议的效率。
  3. 字段(Content-Length):一个tcp连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是Content-Length字段的作用,声明本次回应的数据长度。
  4. 分块传输编码

http报文结构(请求/响应报文结构)

请求报文和响应报文都是由以下4部分组成:

  1. 请求行/响应行
  2. 请求头/响应头
  3. 空行
  4. .消息主体(请求体/响应体)

http报文请求方法

方法含义
GET请求读取
POST请求添加
PUT存储
DELETE删除
HEAD请求信息首部
TRACE用于测试,要求服务器回收到请求
CONNECTION用于代理服务器
OPTION查询特定选项

http报文状态码

响应报文里的状态码:指明特定的请求是否被满足,如没有满足,给出原因。

状态码含义示例
1xx通知信息100:服务器正在处理客户端请求
2xx成功200:请求成功
3xx重定向301:重定向
4xx客户端错误403:禁止的页面;404:未找到
5xx服务器错误500:服务器内部错误

http协议短板

  • 请求/响应模型

请求/响应模型:通信只能由客户端发起,服务端不能主动发送消息给客户端。

客户端 服务器 请求 响应 客户端 服务器
  • 轮巡polling技术

客户端以一定时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务端的同步。其实大量的定时请求都是无效的,因为服务端数据并没有更新,相应地也导致了大量的带宽等资源浪费。

客户端 服务端 Connection Open Return data.Connection Close interval Connection Open Return data.Connection Close interval Connection Open Return data.Connection Close 客户端 服务端
  • 长轮询机制

http长轮询机制是指服务端收到请求后如果有数据,则立即响应请求;如果没有数据,就会停留一段时间,这段时间内,如果服务端请求的数据到了(数据查询完成等),就立刻响应;如果这段时间过后,还没有数据到达,则以空数据的形式响应http请求;若客户端收到的数据为空,会再次发送同样的http请求到服务端。

客户端 服务端 Connection open waiting(event trigger) Return data.Connection close. Connection open waiting(event trigger) Return data.Connection close. 客户端 服务端

长轮询是对定时轮询的改进和提高,目的是为了降低无效的网络传输。

当服务端没有数据更新时,连接会保持一个时间周期,直到数据或者状态改变,或者时间周期到了,通过这个机制来减少无效的客户端与服务端的交互。

然而这种机制存在一个问题:当客户端以固定频率向服务器发起请求时,服务器的数据有可能还没更新,这样就会带来很多无效的网络传输。同时可能延时一个时间周期的情况。

  • 流技术 http streaming

客户端发送获取数据更新请求到服务端时,服务端将保持该请求的响应数据流一直打开,只要有数据更新就实时地发送给客户端。

以上是关于斗艳争妍の网络协议姐妹花http协议 VS websocket协议的主要内容,如果未能解决你的问题,请参考以下文章

网络基础:HTTP协议 vs HTTPS协议 区别

websocket vs http vs spdy [关闭]

清明学习--Http协议

HTTP vs HTTPS

长轮询 VS 短轮询

http基础(1.了解web及网络基础,2.简单的http协议)