zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

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

2023-04-18 12:38:00 时间

目前请求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  //服务器的主机地址和端口号,默认是80
Connection: 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 //服务器的主机地址和端口号,默认是80
Connection: 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对象******
<!DOCTYPE html><html lang=“en”> …</html> //响应给客户端的数据

//常见的响应码===================================================================================================== //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版本。