最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

当前讯息:Blazor和Vue对比学习(进阶.请求WebAPI):通讯协议和HTTP协议

来源:博客园

目前请求WebAPI主要有两种方式,一是HTTP请求,二是gRPC请求。本章节主要介绍HTTP请求,Blazor中使用HttpClientFactory,Vue中使用Axios,前后端通用,即可用于客户端向服务端发送请求,也可用于服务端向服务端发送请求。在正式学习HttpClientFactory和Axios之前,有必要了解一下不同通讯协议之间的关系,以及HTTP协议的具体内容。

一、几个常见通讯协议的区别和联系

1、TCP、HTTP和Websocket


(资料图片仅供参考)

  • TCP:在OSI模型7层结构中,属于传输层协议,HTTP和Websocket的底层连接都基于TCP
  • HTTP:在OSI模型7层结构中,属于应用层协议,基于TCP
  • Websocket:和HTTP一样,也属于应用层协议,也基于TCP

2、HTTP和Websocket的特点及区别:1)HTTP

  • 基于请求响应模式,由客户端发起请求,服务端做出响应。
  • 无连接、无状态,即每次请求响应后,连接都会断开,且服务端不会记录
  • 以文本方式传输数据
  • 指定了80(HTTP)和443(HTTPS)端口,一般计算机不会限制,可以顺利通过防火墙
  • 有同源限制,即跨域问题

2)Websocket

  • 基于双工模式,客户端和服务端可以相互推送信息
  • 可以保持长连接,可以保存状态信息
  • 即可以传输文本,也可以传输二进制,且传输报文更轻量,所以性能更高效
  • 与HTTP协议有着良好的兼容性,一般将Websocket布置到HTTP服务器上,共享HTTP的端口,服务端和客户端初次握手阶段也使用HTTP协议
  • 没有同源限制,不存在跨域问题
  • 协议标识符为ws或wss(加密),网址也使用URL

3、HTTP1、HTTP2、HTTP3的区别1)HTTP1的问题

  • 每个TCP连接只能处理一个请求,且浏览器限制连接数,所以会造成请求阻塞
  • 只能通过文本方式传输数据,性能开销较大

2)HTTP2的提升

  • 引用多路复用技术,一个TCP连接可以处理所有请求数据
  • 新的编码机制,传输数据被分割,且采用二进制,性能更高效
  • 服务端在客户端请求后,可以PUSH其它资源

3)HTTP3的提升

  • 使用QUIC,解决HTTP2可能存在的丢包重连的情况
  • 可以缓存上下文,在HTTP2基础上,大大提升了性能和纠错能力

4、RPC:不是协议,而是一种远程调用方法(API)

  • 可以基于TCP协议,也可以基于HTTP协议,还可以自定义TCP协议
  • 基于二进制传输,且传输报文更轻量,性能高
  • 自带负载均衡,而HTTP需要借助Nginxt等
  • RPC因为传输效率高、性能消耗低等特点,常用于服务端之间相互调用
  • gRPC是由google开发的RPC框架,基于HTTP2协议,与语言无关,应用比较广泛

二、HTTP协议

1、HTTP请求过程

2、HTTP请求数据(报文)案例解析

//GET请求=========================================================================================================//******请求行******GET /user/1 HTTP/1.1  //GET请求方式 请求资源路径 HTTP协议版本//******请求头******Host: www.itcast.cn  //服务器的主机地址和端口号,默认是80Connection: keep-alive //和服务端保持长连接Upgrade-Insecure-Requests: 1 //让浏览器升级不安全请求,使用https请求User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) Chrome/69.0.3497.100...  //用户代理,即客户端的名称Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 //可接受的数据类型Accept-Encoding: gzip, deflate //可接受的压缩格式Accept-Language: zh-CN,zh;q=0.9 //可接受的语言Cookie: pgv_pvi=1246921728; //登录用户的身份标识//******空行******//POST请求=======================================================================================================//******请求行******POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 //POST请求方式 请求资源路径 HTTP协议版本//******请求头******Host: mail.itcast.cn //服务器的主机地址和端口号,默认是80Connection: keep-alive //和服务端保持长连接Content-Type: application/json  //告诉服务端请求的数据类型User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) Chrome/69.0.3497.100... //客户端的名称//******空行******//******请求体,常使用JSON对象******username=hello&pass=hello //请求体

3、HTTP响应数据(报文)案例解析

//响应数据========================================================================================================//******响应行/状态行******HTTP/1.1 200 OK //HTTP协议版本 状态码 状态描述//******响应头******Server: Tengine //服务器名称Content-Type: text/html; charset=UTF-8 //内容类型Transfer-Encoding: chunked //发送给客户端内容,不确定长度。Content-Length表示发送给客户端的内容,能确定大小。二者只能用其一。Connection: keep-alive //和客户端保持长连接Date: Fri, 23 Nov 2018 02:01:05 GMT //服务端的响应时间//******空行******//******响应体,通常为JSON对象****** … //响应给客户端的数据//常见的响应码=====================================================================================================//2XX,成功200,OK,表示请求已被正确处理。201,Created,表示请求已被实现,且根据请求创建一个新的资源。通常在POST或PUT请求成功后返回。202,Accepted,表示请求已被接受,但是尚未处理,并不保证能完成。适合异步任务或者需要处理时间比较长的请求,避免一直占用HTTP连接。204,No content,表示请求成功,但响应报文不含主体部分。206,Partial Content,表示已经成功处理了部分GET请求,响应头中会包含获取的内容范围 (常用于分段下载)。//3XX,重定向301,Moved Permanently,永久性重定向,表示资源已被分配到新的URL,如访问http://www.baidu.com,跳转到https://www.baidu.com。302,Found,临时性重定向,表示资源临时被分配了新的URL, 如需要登录才能操作的内容, 重定向到登录页。303,See Other,针对POST请求,表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。307,Temporary Redirect,针对POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求304,Not Modified,表示自从上次请求后,请求的网页内容未修改过,使用协商缓存,服务器不返回网页内容。//4XX,客户端错误400,Bad Request,表示请求报文存在语法错误,如传参格式不正确。401,UnAuthorized,表示权限认证未通过,没有权限。403,Forbidden,表示对请求资源的访问被服务器拒绝。404,Not Found,表示在服务器上没有找到请求的资源。408,Request Timeout,客户端请求超时。409,Confict,请求的资源可能引起冲突。//5XX,服务端错误500,Internal Sever Error,表示服务器端在执行请求时发生了错误。501,Not Implemented,表示请求超出服务器的能力范围,例如服务器没有当前请求所需要的某个功能。503,Service Unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求。505,Http Version Not Supported,服务器不支持或者拒绝支持在请求中使用的HTTP版本。

关键词: 可接受的 服务器的 协议版本