Natasha 群5月11日吹水备忘录
HTTP/2 新特性
关于 HTTP/2
HTTP/2 并不是对 HTTP 协议的彻底重写,HTTP/2 关注的重点是性能、低延迟、降低网络和服务器资源使用等;与 HTTP 的请求方法、状态代码和语义等是相同的。
HTTP/2 由两个部分组成:
HTTP/2 的主要特性体现在 HPACK 中。
可参考:https://www.jianshu.com/p/f44b930cfcac
HTTP1.x 缺点
HTTP1.x 协议出现时间较早,其协议头有很多重复的部分,或者赘余的部分。其劣势是 HTTP1.x 在 HTTP 请求中,每次请求和相应数据,都需要传递大量的数据。这样就需要消耗大量资源。
HTTP 请求,有 Get
、Post
、Put
、Delete
等方法,使用字母单词表示,则需要传递多个字节,如果使用 1
,2
,3
,4
表示上述的请求方法,则可以省下大量字节。
HPack 正是使用了此种特性,通过一系列算法去减少 HTTP 头部的传输的字节,实现数据压缩。
HPack
HPack 称为 HTTP2 头部压缩算法,定义了一种有效表示 HTTP 标头字段的压缩格式。HPACK 使用2个索引表(静态索引表和动态索引表)来把头部映射到索引值,并对不存在的头部使用 huffman 编码,并动态缓存到索引,从而达到压缩头部的效果。
动态索引表:
那么动态表就是,当一个头部没有出现过的时候,会把他插入动态表中,下次同名的值就可能会在表中查到到索引并替换掉头部。为什么我说是可能呢,因为动态表是有最大空间限制的。
静态索引表:
静态表的大小现在是固定的 61, 因此静态表就是从1到61的索引,然后动态表从新到旧,依次从62开始递增。这样就共同的组成了一个索引空间,且互不冲突。
HTTP/2 中引入了多路复用的概念,对于同一个域名的多个请求,会复用同一个连接。
详细协议定义,请参考:https://httpwg.org/specs/rfc7541.html
.NET 5新特性
Web 主机新特性
Microsoft.AspNetCore.Server.HttpSys
用于专门用于 IIS 的通信库,增加了一个方法,其定义如下:
public bool AutomaticAuthentication { get; set; }
Microsoft.AspNetCore.Server.Kestrel.Core
命名空间增加了 Http3Limits
这个类型。
Kestrel 服务器定义的异常:
Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException
IIS 服务器定义的异常:
Microsoft.AspNetCore.Server.IIS.BadHttpRequestException
两者统一到:
Microsoft.AspNetCore.Http.BadHttpRequestException
HttpClient 类型返回状态码改变
HttpClient 用于 HTTP 请求,其返回结果从 OK
改成 status:200
。
江湖传闻说是方便ES检索等其他操作。
还有根据 PFC 7111 规范, .csv
文件 的 HTTP 类型从 application/octet-stream
改为 text/csv
。
Authentication
IAuthenticationSchemeProvider
接口增加了一个方法,其定义如下:
bool TryAddScheme(AuthenticationScheme scheme);
当然,我们可以直接使用 AuthenticationSchemeProvider
。
新增 BaseConnectionContext 抽象类型
Microsoft.AspNetCore.Connections
命名空间增加了一个抽象类 BaseConnectionContext
群主目测这个是针对建立连接方面定义的一个抽象,其缺少 Send()
、Recive()
等方法,不具备请求和接收数据的功能。
HttpProtocol 增加协议支持
身份认证增加了邮件支持
Microsoft.AspNetCore.Identity
命名空间中, ClaimsIdentityOptions
类型 增加了一个方法,其定义如:
public string EmailClaimType { get; set; }
UserManager<TUser>
类型公开了 GetChangeEmailTokenPurpose()
这个方法。
Ajax
增加新的头参数 X-Request-With
,其用于在服务端判断 `request 是来自 Ajax 请求(异步)还是传统请求(同步)。
AltSvc
AltSvc 全称是 Alternative Service,翻译是替代服务、自举服务、备选服务。
AltSvc 是 HTTP 响应头,这个协议字段的作用是:如果你现在用的链接是 HTTP2 或者更低版本,
则发送这个字段浏览器,其格式如 Alt-Svc: h3=":50781"
,告诉客户端,我这有 HTTP3,端口是 50781;也可以写成 h2="www.xxx.com:443",h2=":443"
。
可以参考 RFC7838:
https://tools.ietf.org/html/rfc7838
.NET 5 中对操作系统的支持
Windows:
Linux:
MacOs:
文章评论