Natasha 群5月11日吹水备忘录

内容纲要

Natasha 群5月11日吹水备忘录

HTTP/2 新特性

关于 HTTP/2

HTTP/2 并不是对 HTTP 协议的彻底重写,HTTP/2 关注的重点是性能、低延迟、降低网络和服务器资源使用等;与 HTTP 的请求方法、状态代码和语义等是相同的。

HTTP/2 由两个部分组成:

  • 超文本传输协议(version 2) –RFC7540
  • HPACK (HTTP/2 头部压缩算法) –RFC7541

HTTP/2 的主要特性体现在 HPACK 中。

可参考:https://www.jianshu.com/p/f44b930cfcac

HTTP1.x 缺点

HTTP1.x 协议出现时间较早,其协议头有很多重复的部分,或者赘余的部分。其劣势是 HTTP1.x 在 HTTP 请求中,每次请求和相应数据,都需要传递大量的数据。这样就需要消耗大量资源。

《Natasha 群5月11日吹水备忘录》

HTTP 请求,有 GetPostPutDelete 等方法,使用字母单词表示,则需要传递多个字节,如果使用 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 增加协议支持

《Natasha 群5月11日吹水备忘录》

身份认证增加了邮件支持

Microsoft.AspNetCore.Identity 命名空间中, ClaimsIdentityOptions 类型 增加了一个方法,其定义如:

public string EmailClaimType { get; set; }

UserManager<TUser> 类型公开了 GetChangeEmailTokenPurpose() 这个方法。

Ajax

增加新的头参数 X-Request-With ,其用于在服务端判断 `request 是来自 Ajax 请求(异步)还是传统请求(同步)。
《Natasha 群5月11日吹水备忘录》

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:
《Natasha 群5月11日吹水备忘录》
Linux:
《Natasha 群5月11日吹水备忘录》
MacOs:
《Natasha 群5月11日吹水备忘录》

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注