网站建设太仓互联网ui设计发展前景

diannao/2026/1/24 21:56:53/文章来源:
网站建设太仓,互联网ui设计发展前景,免费分类信息网站源码,徐州制作企业网站具有跨平台能力的KestrelServer是最重要的服务器类型。针对KestrelServer的设置均体现在KestrelServerOptions配置选项上#xff0c;注册的终结点是它承载的最重要的配置选项。这里所谓的终结点#xff08;Endpoint#xff09;与“路由”介绍的终结点不是一回事#xff0c;…具有跨平台能力的KestrelServer是最重要的服务器类型。针对KestrelServer的设置均体现在KestrelServerOptions配置选项上注册的终结点是它承载的最重要的配置选项。这里所谓的终结点Endpoint与“路由”介绍的终结点不是一回事这里表示的就是服务器在监听请求时绑定的网络地址对应着一个System.Net.Endpoint对象。我们知道ASP.NET Core应用承载API也提供了注册监听地址的方法其本质其实也是为了注册终结点那么两种注册方式如何取舍呢[本文节选《ASP.NET Core 6框架揭秘》第18章]一、UseKestrel扩展方法二、两种终结点的取舍三、终结点配置四、针对HTTPS的设置五、限制约束六、其他设置一、UseKestrel扩展方法IWebHostBuilder接口如下三个UseKestrel扩展方法重载会帮助我们完成KestrelServer的注册并对KestrelServerOptions配置选项作相应设置我们先来看看如何利用它们来注册终结点。public static class WebHostBuilderKestrelExtensions {public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder);public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder,ActionKestrelServerOptions options);public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder, ActionWebHostBuilderContext, KestrelServerOptions configureOptions); }注册到KestrelServer上的终结点体现为如下这个Endpoint对象。Endpoint是对网络地址的抽象它们在大部分下体现为“IP地址端口”或者“域名端口”对应的类型分别为IPEndPoint和DnsEndPoint。UnixDomainSocketEndPoint表示基于Unix Domain Socket/IPC Socket的终结点它旨在实现同一台机器上多个进程之间的通信IPC。FileHandleEndPoint表示指向某个文件句柄比如TCP或者Pipe类型的文件句柄的终结点。public abstract class EndPoint {public virtual AddressFamily AddressFamily { get; }public virtual EndPoint Create(SocketAddress socketAddress);public virtual SocketAddress Serialize(); }public class IPEndPoint : EndPoint public class DnsEndPoint : EndPoint public sealed class UnixDomainSocketEndPoint : EndPoint public class FileHandleEndPoint : EndPoint终结点注册利用如下这个ListenOptions配置选项来描述。该类型实现的IConnectionBuilder和IMultiplexedConnectionBuilder接口涉及针对连接的构建我们将在后面讨论这个话题。注册的终结点体现为该配置选项的EndPoint属性如果是一个IPEndPoint对象该对象也会体现在IPEndPoint属性上。如果终结点类型为UnixDomainSocketEndPoint和FileHandleEndPoint我们可以利用配置选项的SocketPath和FileHandle得到对应的Socket路径和文件句柄。public class ListenOptions : IConnectionBuilder, IMultiplexedConnectionBuilder {public EndPoint EndPoint { get; }public IPEndPoint IPEndPoint { get; }public string SocketPath { get; }public ulong FileHandle { get; }public HttpProtocols Protocols { get; set; }public bool DisableAltSvcHeader { get; set; }public IServiceProvider ApplicationServices { get; }public KestrelServerOptions KestrelServerOptions { get; }... }同一个终结点可以同时支持HTTP 1.x、HTTP 2 和HTTP 3三种协议具体设置体现在Protocols属性上该属性返回如下这个HttpProtocols枚举。由于枚举项Http3和Http1AndHttp2AndHttp3上面标注了RequiresPreviewFeaturesAttribute特性如果需要采用HTTP 3协议项目文件中必须添加“EnablePreviewFeaturestrue/EnablePreviewFeatures”属性。如果HTTP3终结点同时支持HTTP 1.X和HTTP 2针对HTTP 1.X和HTTP 2的请求的响应一般会添加一个alt-svc Alternative Service)报头指示可以升级到HTTP 3我们可以设置DisableAltSvcHeader属性关闭此特性。该属性默认值为Http1AndHttp2。[Flags] public enum HttpProtocols {None  0,Http1  1,Http2  2,Http1AndHttp2  3,[RequiresPreviewFeatures]Http3  4,[RequiresPreviewFeatures]Http1AndHttp2AndHttp3  7 }KestrelServerOptions的ListenOptions属性返回的ListenOptions列表代表所有注册的终结点它由CodeBackedListenOptions和ConfigurationBackedListenOptions属性合并而成这两个属性分别表示通过代码和配置注册的终结点。基于“代码”的终结点注册由如下所示的一系列Listen和以“Listen”为前缀的方法来完成。除了这些注册单个终结点的方法 ConfigureEndpointDefaults方法为注册的所有终结点提供基础设置。public class KestrelServerOptions {internal ListListenOptions  CodeBackedListenOptions { get; }internal ListListenOptions  ConfigurationBackedListenOptions { get; }internal IEnumerableListenOptions     ListenOptions { get; }public void Listen(EndPoint endPoint);public void Listen(IPEndPoint endPoint);public void Listen(EndPoint endPoint, ActionListenOptions configure);public void Listen(IPAddress address, int port);public void Listen(IPEndPoint endPoint, ActionListenOptions configure);public void Listen(IPAddress address, int port, ActionListenOptions configure);public void ListenAnyIP(int port);public void ListenAnyIP(int port, ActionListenOptions configure);public void ListenHandle(ulong handle);public void ListenHandle(ulong handle, ActionListenOptions configure);public void ListenLocalhost(int port);public void ListenLocalhost(int port, ActionListenOptions configure);public void ListenUnixSocket(string socketPath);public void ListenUnixSocket(string socketPath, ActionListenOptions configure);public void ConfigureEndpointDefaults(ActionListenOptions configureOptions)... }二、两种终结点的取舍我们知道监听地址不仅可以添加到WebApplication对象的Urls属性中WebApplication类型用来启动应用的RunAsync和Run方法也提供了可缺省的参数url来指定监听地址。从如下的代码片段可以看出这三种方式提供的监听地址都被添加到了IServerAddressesFeature特性的Addresses属性中。public sealed class WebApplication : IHost {private readonly IHost _host;public ICollectionstring Urls  _host.Services.GetRequiredServiceIServer().Features.GetIServerAddressesFeature()?.Addresses ?? throw new InvalidOperationException(IServerAddressesFeature could not be found.);public Task RunAsync(string? url  null){Listen(url);return ((IHost)this).RunAsync();}public void Run(string? url  null){Listen(url);((IHost)this).Run();}private void Listen(string? url){if (url ! null){var addresses  ServerFeatures.GetIServerAddressesFeature()?.Addresses ?? throw new InvalidOperationException(No valid IServerAddressesFeature is found);addresses.Clear();addresses.Add(url);}} }如果KestrelServerOptions配置选项不能提供注册的终结点那么KestrelServer就会使用IServerAddressesFeature特性提供的地址来创建对应的终结点否则就会根据它的PreferHostingUrls属性来进行取舍。如果IServerAddressesFeature特性的PreferHostingUrls属性返回True它提供的地址会被选择否则就使用直接注册到KestrelServerOptions配置选项的终结点。针对监听地址的注册和PreferHostingUrls的设置可以利用IWebHostBuilder接口如下两个扩展方法来完成。从给出的代码片段可以看出这两个方法会将提供的设置存储配置上配置项名称分别为“urls”和“preferHostingUrls”对应着WebHostDefaults定义的两个静态只读字段ServerUrlsKey和PreferHostingUrlsKey。既然这两个设置来源于配置我们自然可以利用命令行参数、环境变量或者直接修改对应配置项的方式来指定它们。public static class HostingAbstractionsWebHostBuilderExtensions {public static IWebHostBuilder UseUrls(this IWebHostBuilder hostBuilder, params string[] urls) hostBuilder.UseSetting(WebHostDefaults.ServerUrlsKey, string.Join(;, urls));public static IWebHostBuilder PreferHostingUrls(this IWebHostBuilder hostBuilder, bool preferHostingUrls) hostBuilder.UseSetting(WebHostDefaults.PreferHostingUrlsKey, preferHostingUrls ? true : false); }如果服务器的特性集合提供的IServerAddressesFeature特性包含监听地址以配置方式设置的监听地址和针对PreferHostingUrls的设置将会被忽略这一个特性体现在GenericWebHostService的StartAsync方法中。如下面的代码片段所示该方法会从服务器中提取IServerAddressesFeature特性只有该特性不能提供监听地址的情况下利用配置注册的监听地址和针对PreferHostingUrls的设置才会应用到该特性中。internal sealed class GenericWebHostService : IHostedService {public async Task StartAsync(CancellationToken cancellationToken){...var serverAddressesFeature  Server.Features.GetIServerAddressesFeature();var addresses  serverAddressesFeature?.Addresses;if (addresses ! null  !addresses.IsReadOnly  addresses.Count  0){var text  Configuration[WebHostDefaults.ServerUrlsKey];if (!string.IsNullOrEmpty(text)){serverAddressesFeature.PreferHostingUrls  WebHostUtilities.ParseBool(Configuration, WebHostDefaults.PreferHostingUrlsKey);string[] array  text.Split(;, StringSplitOptions.RemoveEmptyEntries);foreach (string item in array){addresses.Add(item);}}}} }下面的演示程序通过调用IWebHostBuilder接口的UseKestrel扩展方法注册了一个采用8000端口的本地终结点通过调用UseUrls扩展方法注册了一个采用9000端口的监听地址。var builder  WebApplication.CreateBuilder(args); builder.WebHost.UseKestrel(kestrel  kestrel.ListenLocalhost(8000)).UseUrls(http://localhost:9000); var app  builder.Build(); app.Run();我们以命令行的方式两次启动了该程序。默认情况下应用会选择调用UseKestrel扩展方法注册的终结点。如果指定了命令行参数“preferHostingUrls1”,那么最终使用的都是将是调用UseUrls扩展方法注册的监听地址。由于两种情况都涉及到放弃某种设置所以输出了相应的日志。图1 两种终结点的选择三、终结点配置KestrelServerOptions承载的很多设置都可以利用配置来提供。由于该配置选项类型的定义与配置的结构存在差异 KestrelServerOptions配置选项无法直接使用对应的IConfiguration对象进行绑定所以KestrelServerOptions类型定义如下三个Configure方法。后面两个方法提供了承载配置内容的IConfiguration对象最后一个重载还提供了reloadOnChange参数来决定是否自动加载更新后的配置。第一个重载提供的其实是一个空的IConfiguration对象。public class KestrelServerOptions {public KestrelConfigurationLoader Configure();public KestrelConfigurationLoader Configure(IConfiguration config);public KestrelConfigurationLoader Configure(IConfiguration config, bool reloadOnChange) }三个Configure方法都返回KestrelConfigurationLoader对象后者是对当前KestrelServerOptions配置选项和指定IConfiguration对象的封装。KestrelConfigurationLoader的Load方法会读取配置的内容并将其应用到KestrelServerOptions配置选项上该类型还提供了一系列注册各类终结点的方法。public class KestrelConfigurationLoader {public KestrelServerOptions Options { get; }public IConfiguration Configuration { get; }public KestrelConfigurationLoader Endpoint(string name, ActionEndpointConfiguration configureOptions);public KestrelConfigurationLoader Endpoint(IPAddress address, int port);public KestrelConfigurationLoader Endpoint(IPAddress address, int port, ActionListenOptions configure);public KestrelConfigurationLoader Endpoint(IPEndPoint endPoint);public KestrelConfigurationLoader Endpoint(IPEndPoint endPoint, ActionListenOptions configure);public KestrelConfigurationLoader LocalhostEndpoint(int port);public KestrelConfigurationLoader LocalhostEndpoint(int port, ActionListenOptions configure);public KestrelConfigurationLoader AnyIPEndpoint(int port);public KestrelConfigurationLoader AnyIPEndpoint(int port, ActionListenOptions configure);public KestrelConfigurationLoader UnixSocketEndpoint(string socketPath);public KestrelConfigurationLoader UnixSocketEndpoint(string socketPath, ActionListenOptions configure);public KestrelConfigurationLoader HandleEndpoint(ulong handle);public KestrelConfigurationLoader HandleEndpoint(ulong handle, ActionListenOptions configure);public void Load(); }ASP.NET Core应用在启动时会调用IHostBuilder接口如下这个ConfigureWebHostDefaults扩展方法进行初始化设置该方法会从当前配置中提取出“Kestrel”配置节并将其作为参数调用Configure方法将配置内容应用到KestrelServerOptions配置选项上。由于reloadOnChange参数被设置成了True所以更新后的配置会自动被重新加载。public static class GenericHostBuilderExtensions {public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder, ActionIWebHostBuilder configure)  builder.ConfigureWebHost(webHostBuilder  {WebHost.ConfigureWebDefaults(webHostBuilder);configure(webHostBuilder);}); }public static class WebHost {internal static void ConfigureWebDefaults(IWebHostBuilder builder){...builder.UseKestrel((builderContext, options)  options.Configure(builderContext.Configuration.GetSection(Kestrel), reloadOnChange: true)...} }如下的代码片段展现了针对终结点的配置。我们在“KestrelEndpoints”配置了两个分别命名为“endpoint1”和“endpoint2”终结点它们采用的监听地址分别为“http://localhost:9000”和“https://localhost:9001”。KestrelServerOptions绝大部分配置选项都可以定义在配置文件中具体的配置定义方法可以参阅官方文档。{Kestrel: {Endpoints: {endpoint1: {Url: http://localhost:9000},endpoint2: {Url: https://localhost:9001}}} }四、针对HTTPS的设置较之普通的终结点HTTPSSSL/TLS终结点需要提供额外的设置这些设置大都体现在如下这个HttpsConnectionAdapterOptions配置选项上。KestrelServerOptions的ConfigureHttpsDefaults方法为所有HTTPS终结点提供了默认的设置。public class HttpsConnectionAdapterOptions {public X509Certificate2? ServerCertificate { get; set; }public FuncConnectionContext?, string?, X509Certificate2?? ServerCertificateSelector { get; set; }public TimeSpan HandshakeTimeout { get; set; }public SslProtocols SslProtocols { get; set; }public ActionConnectionContext, SslServerAuthenticationOptions? OnAuthenticate { get; set; }public ClientCertificateMode ClientCertificateMode { get; set; }public FuncX509Certificate2, X509Chain?, SslPolicyErrors, bool? ClientCertificateValidation { get; set; }public bool CheckCertificateRevocation { get; set; }public void AllowAnyClientCertificate() { get; set; } }public static class KestrelServerOptions {public void ConfigureHttpsDefaults(ActionHttpsConnectionAdapterOptions configureOptions);... }表示服务端证书的X509Certificate2对象可以直接设置到ServerCertificate属性上我们也可以在ServerCertificateSelector属性上设置一个根据当前连结动态选择证书的委托。SslProtocols属性用来设置采用的协议SSL或者TLS对应的类型为如下这个SslProtocols枚举。HandshakeTimeout属性用来设置TLS/SSL“握手”的超时时间默认为10秒。[Flags] public enum SslProtocols {None  0x0,[Obsolete(SslProtocols.Ssl2 has been deprecated and is not supported.)]Ssl2  0xC,[Obsolete(SslProtocols.Ssl3 has been deprecated and is not supported.)]Ssl3  0x30,Tls  0xC0,[Obsolete(SslProtocols.Default has been deprecated and is not supported.)]Default  0xF0,Tls11  0x300,Tls12  0xC00,Tls13  0x3000 }HTTPS主要解决的是服务端的认证和传输安全问题所以服务端的认证信息需要在前期“协商”阶段利用建立的安全通道传递给客户端具体的认证信息是如下这个SslServerAuthenticationOptions配置选项格式化后的结果。HttpsConnectionAdapterOptions的OnAuthenticate属性提供的委托可以帮助我们对这个配置选项进行设置所以绝大部分HTTPS相关的设置都可以利用该属性来完成。public class SslServerAuthenticationOptions {public bool AllowRenegotiation { get; set; }public bool ClientCertificateRequired { get; set; }public ListSslApplicationProtocol? ApplicationProtocols { get; set; }public RemoteCertificateValidationCallback? RemoteCertificateValidationCallback { get; set; }public ServerCertificateSelectionCallback? ServerCertificateSelectionCallback { get; set; }public X509Certificate? ServerCertificate { get; set; }public SslStreamCertificateContext? ServerCertificateContext { get; set; }public SslProtocols EnabledSslProtocols { get; set; }public X509RevocationMode CertificateRevocationCheckMode { get; set; }public EncryptionPolicy EncryptionPolicy { get; set; }public CipherSuitesPolicy? CipherSuitesPolicy { get; set; } }HTTPS不仅仅能够帮助客户端来验证服务端的身份还能帮助服务端来对客户端身份进行验证。服务端验证利用服务端证书来完成与之类似服务端要识别客户端的身份同样需要客户端提供证书。我们可以利用HttpsConnectionAdapterOptions的ClientCertificateMode属性来决定是否要求客户端提供证书该属性类型为如下这个ClientCertificateMode枚举。针对客户端认证的验证可以利用ClientCertificateValidation属性设置的委托来完成。public enum ClientCertificateMode {NoCertificate,AllowCertificate,RequireCertificate,DelayCertificate }由权威机构Certificate Authority颁发的证书可能会由于某种原因被撤销我们有两种途径来确定某张证书是否处于被撤销的状态证书颁发机构可以采用标准的OCSPOnline Certificate Status Protocol协议提供用于确定证书状态的API也可以直接提供一份撤销的证书清单CRLCertificate Revocation List。HttpsConnectionAdapterOptions的CheckCertificateRevocation属性用来决定是否需要对证书的撤销状态进行验证。如果不需要对客户端证书作任何验证我们可以调用HttpsConnectionAdapterOptions的AllowAnyClientCertificate方法。当我们将某个终结点注册到KestrelServer上并生成对应ListenOptions配置选项后我们可以调用后者的UseHttps扩展方法注册终结点的很多方法都提供一个ActionListenOptions参数完成针对HTTPS的设置我们有如下这一系列UseHttps重载可供选择。对于证书的设置我们可以直接指定一个X509Certificate2对象也可以指定证书文件的路径一般还需要提供读取证书的密码还可以指定证书的存储Certificate Store。我们可以利用部分方法重载提供的委托对HttpsConnectionAdapterOptions配置选项进行设置。部分方法重载还提供了一个ServerOptionsSelectionCallback委托直接返回SslServerAuthenticationOptions配置选项。public static class ListenOptionsHttpsExtensions {public static ListenOptions UseHttps(this ListenOptions listenOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, string fileName);public static ListenOptions UseHttps(this ListenOptions listenOptions, string fileName, string? password);public static ListenOptions UseHttps(this ListenOptions listenOptions, string fileName, string? password, ActionHttpsConnectionAdapterOptions configureOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, StoreName storeName, string subject);public static ListenOptions UseHttps(this ListenOptions listenOptions, StoreName storeName, string subject, bool allowInvalid);public static ListenOptions UseHttps(this ListenOptions listenOptions, StoreName storeName, string subject, bool allowInvalid, StoreLocation location);public static ListenOptions UseHttps(this ListenOptions listenOptions, StoreName storeName, string subject, bool allowInvalid, StoreLocation location, ActionHttpsConnectionAdapterOptions configureOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, X509Certificate2 serverCertificate);public static ListenOptions UseHttps(this ListenOptions listenOptions, X509Certificate2 serverCertificate, ActionHttpsConnectionAdapterOptions configureOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, ActionHttpsConnectionAdapterOptions configureOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, HttpsConnectionAdapterOptions httpsOptions);public static ListenOptions UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state);public static ListenOptions UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout);public static ListenOptions UseHttps(this ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions); }public delegate ValueTaskSslServerAuthenticationOptions ServerOptionsSelectionCallback(SslStream stream, SslClientHelloInfo clientHelloInfo, object? state, CancellationToken cancellationToken);除了调用上述这些方法来为注册的终结点提供HTTPS相关的设置外这些设置也可以按照如下的方式放在终结点的配置中。{Kestrel: {Endpoints: {MyHttpsEndpoint: {Url: https://localhost:5001,ClientCertificateMode: AllowCertificate,Certificate: {Path: c:\\certificates\\foobar.pfx,Password: password}}}} }五、限制约束为了确保KestrelServer稳定可靠地运行需要根据需要为它设置相应的限制和约束这些设置体现在KestrelServerOptions配置选项Limits属性返回的KestrelServerLimits对象上。public class KestrelServerOptions {public KestrelServerLimits Limits { get; }  new KestrelServerLimits(); }public class KestrelServerLimits {public long? MaxConcurrentConnections { get; set; }public long? MaxConcurrentUpgradedConnections { get; set; }public TimeSpan KeepAliveTimeout { get; set; }public int MaxRequestHeaderCount { get; set; }public long? MaxRequestBufferSize { get; set; }public int MaxRequestHeadersTotalSize { get; set; }public int MaxRequestLineSize { get; set; }public long? MaxRequestBodySize { get; set; }public TimeSpan RequestHeadersTimeout { get; set; }public MinDataRate MinRequestBodyDataRate { get; set; }public long? MaxResponseBufferSize { get; set; }public MinDataRate MinResponseDataRate { get; set; }public Http2Limits Http2 { get; }public Http3Limits Http3 { get; } }KestrelServerLimits利用其丰富的属性对连接、请求和响应进行了相应的限制。KestrelServer提供了针对HTTP 2和HTTP3的支持针对性的限制设置体现在KestrelServerLimits类型的Http2和Http3属性上。下表对定义在KestrelServerLimits类型中的这些属性所体现的限制约束进行了简单说明。属性含  义MaxConcurrentConnections最大并发连接。如果设置为Null默认值意味着不作限制。MaxConcurrentUpgradedConnections可升级连接比如从HTTP升级到WebSocket的最大并发数。如果设置为Null默认值意味着不作限制。KeepAliveTimeout连接保持活动状态的超时时间默认值为130秒。MaxRequestHeaderCount请求携带的最大报头数量默认值为100。MaxRequestBufferSize请求缓冲区最大容量默认值为1,048,576字节1M。MaxRequestHeadersTotalSize请求携带报头总字节数默认值为 32,768字节32K。MaxRequestLineSize对于HTTP 1.X来说就是请求的首行Request Line最大字节数。对于HTTP 2/3来说就是 :method, :scheme, :authority, and :path这些报头的总字节数。默认值为8,192 字节8K。MaxRequestBodySize请求主体最大字节数默认值为30,000,000 字节约28.6M。如果设置为Null意味着不作限制。RequestHeadersTimeout接收请求报头的超时时间默认为30秒。MinRequestBodyDataRate请求主体内容最低传输率。MaxResponseBufferSize响应缓冲区最大容量默认值为65,5361M。MinResponseDataRate响应最低传输率。KestrelServerLimits的MinRequestBodyDataRate和MinResponseDataRate属性返回的最低传输率体现为如下这个MinDataRate对象。如果没有达到设定的传输率当前连接就会被重置。MinDataRate对象除了提供表示传输率的BytesPerSecond属性外还提供了一个表示“宽限时间”的GracePeriod属性。并非传输率下降到设定的阈值的那一刻就重置连接只要在指定的时段内传输率上升到阈值以上也没有问题。MinRequestBodyDataRate和MinResponseDataRate属性的默认值均为“240 bytes/second5 seconds”。public class MinDataRate {public double BytesPerSecond { get; }public TimeSpan GracePeriod { get; }public MinDataRate(double bytesPerSecond, TimeSpan gracePeriod); }HTTP 1.X建立在TCP之上客户端和服务端之间的交互依赖预先创建的TCP连接。虽然HTTP 1.1引入的流水线技术允许客户端可以随时向服务端发送请求而无需等待接收到上一个请求的响应但是响应依然只能按照请求的接收顺序返回的。真正意义上的“并发”请求只能利用多个连接来完成但是针对同一个域名支持的TCP连接的数量又是有限的。这个问题在HTTP 2得到了一定程度的解决。与采用文本编码的HTTP 1.X相比 HTTP 2采用更加高效的二进制编码。帧Frame成为了基本通信单元单个请求和响应可以分解成多个帧进行发送。客户端和服务端之间额消息交换在一个支持双向通信的信道Channel中完成该信道被称为“流Stream”。每一个流具有一个唯一标识同一个TCP连接可以承载成百上千的流。每个帧携带着所属流的标识所以它可以随时被“乱序”发送接收端可以利用流的标识进行重组所以HTTP 2在同一个TCP连接上实现了“多路复用”。使用同一个连接发送的请求和响应都存在很多重复的报头为了减少报头内容占据的带宽HTTP 2会采用一种名为HPACK的压缩算法对报头文本进行编码。HPACK会在发送和接收端维护一个索引表来存储编码的文本报头内容在发送前会被替换成在该表的索引接收端这利用此索引在本地压缩表中找到原始的内容。public class Http2Limits {public int     MaxStreamsPerConnection { get; set; }public int     HeaderTableSize { get; set; }public int     MaxFrameSize { get; set; }public int     MaxRequestHeaderFieldSize { get; set; }public int     InitialConnectionWindowSize { get; set; }public int     InitialStreamWindowSize { get; set; }public TimeSpan     KeepAlivePingDelay { get; set; }public TimeSpan     KeepAlivePingTimeout { get; set; } }于HTTP 2相关限制和约束的设置体现在KestrelServerLimits的Http2属性上该属性返回如上所示的Http2Limits对象。下表对定义在Http2Limits类型中的这些属性所体现的限制约束进行了简单说明。属性含  义MaxStreamsPerConnection连接能够承载的流数量默认值为100。HeaderTableSizeHPACK报头压缩表的容量默认值为4096。MaxFrameSize帧的最大字节数有效值在[214~224 – 1]区间范围内默认值为21416384。MaxRequestHeaderFieldSize最大请求报头含报头名称的最大字节数默认值为21416384。InitialConnectionWindowSize连接的初始化请求主体缓存区的大小有效值在[65535~231]区间范围内默认为131072。InitialStreamWindowSize流的初始化请求主体缓存区的大小有效值在[65535~231]区间范围内默认为98304。KeepAlivePingDelay如果服务端在该属性设定的时间跨度内没有接收到来自客户端的有效帧它会主动发送Ping请求确定客户端的是否保持活动状态默认值为1秒。KeepAlivePingTimeout发送Ping请求的超时时间如果客户端在该时限内一直处于为活动状态当前连接将被关闭默认值为20秒。由于HTTP 2的多路复用是在同一个TCP连接上实现的这样的实现并不“纯粹”因为它不可能解决由于TCP的“拥塞控制”机制导致的“队头阻塞Header-Of-Line Blocking”问题。如果希望在得到并发支持的前提下还能在低延时上有更好的作为就不得不抛弃TCP。目前被正式确定为HTTP 3的QUICQuick UDP Internet Connection就将TCP替换成了UDP。如果KestrelServer支持HTTP 3我们可以利用KestrelServerLimits的Http3属性返回的Http3Limits对象都限制约束进行针对性设置。Http3Limits只包含如下这个表示最大请求报头字节数的MaxRequestHeaderFieldSize属性它的默认值为16384。public class Http3Limits {public int MaxRequestHeaderFieldSize { get; set;} }六、其他设置除了注册的终结点和基于通信的限制约束KestrelServerOptions配置选项还利用如下的属性承载着其他的设置。public class KestrelServerOptions {public bool AddServerHeader { get; set; }public bool AllowResponseHeaderCompression { get; set; }public bool AllowSynchronousIO { get; set; }public bool AllowAlternateSchemes { get; set; }public bool DisableStringReuse { get; set; }public Funcstring, Encoding RequestHeaderEncodingSelector { get; set; }public Funcstring, Encoding ResponseHeaderEncodingSelector { get; set; } }下表对定义在KestrelServerOptions类型中的上述这些属性进行了简单的说明。属性含  义AddServerHeader是否会在回复的响应中自动添加“Server: Kestrel”报头默认值为True。AllowResponseHeaderCompression是否允许对响应报头进行HPACK压缩默认值为True。AllowSynchronousIO是否允许对请求和响应进行同步IO操作默认值为False意味这个默认情况下以同步方式读取请求和写入响应都会抛出异常。AllowAlternateSchemes是否允许为“:scheme”字段针对HTTP 2和HTTP 3提供一个与当前传输不匹配的值“http”或者“https”默认值为False。如果将这个属性设置为True意味着HttpRequest.Scheme属性可能与采用的传输类型不匹配。DisableStringReuse创建的字符串是否可以在多个请求中复用。RequestHeaderEncodingSelector用于设置某个请求报头采用的编码方式默认为Utf8Encoding。ResponseHeaderEncodingSelector用于设置某个响应报头采用的编码方式默认为ASCIIEncoding。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青岛网站建设平台旅游类网站做百度竞价

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中CSS的基础选择及高级选择器(详解)以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获&#xf…

个人网站毕业设计论文wordpress plugins php speedy

结束了常用容器的介绍,今天继续模版内容的讲解: 文章目录 1.非类型模版参数2.模板的特化2.1模版特化引入和概念2.2函数模版特化2.3类模板特化2.3.1全特化2.3.1偏特化 3. 模板分离编译3.1分离编译概念3.2**模板的分离编译**分析原因 1.非类型模版参数 模板…

seo网站分析工具建网站 服务器需要安装 tomcat

A.Graphics类 Graphics类是java.awt包中的一个类,它用于在图形用户界面(GUI)或其他图形应用程序中进行绘制。该类通常与Component的paint方法一起使用,以在组件上进行绘制操作。 一些Graphics类的常见用法和方法: 在组…

网站建设推广代理带动画引导的网站

目录 1. 作者介绍2. 目标跟踪算法介绍2.1 目标跟踪背景2.2 目标跟踪任务分类2.3 目标跟踪遇到的问题2.4 目标跟踪方法 3. 卡尔曼滤波的目标跟踪算法介绍3.1 所用数据视频说明3.2 卡尔曼滤波3.3 单目标跟踪算法3.3.1 IOU匹配算法3.3.2 卡尔曼滤波的使用方法 3.4 多目标跟踪算法 …

服务范围 网站建设公司做企业网站怎么接活

获取MD5、SHA1、SHA256指纹信息 通过命令的形式获取 winr调出黑窗口cd到证书所在目录输入keytool -list -v -keystore test.keystore,其中 test.keystore为你的证书名称加文件后缀按照提示输入你的证书密码,就可以查看证书的信息 通过uniapp云端查看(证书是在DClou…

建筑行业网站模版百度指数分析报告

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

购门网站建设内丘网站建设

文章目录 前言叶节点 Leafs1、行为 Action2、判断 Condition控制组件 Composites1、顺序执行器 Sequencer2、选择执行器 Selector3、概率选择执行器 Probability Selector4、权重选择执行器 Priority Selector5、平行执行器 Parallel6、轮流选择器 Flip Selector7、完整执行器 …

网站定制设计制作公司网站建设论文的中期报告

如何去区分一个功能测试工程师的水平高和低&#xff1f; 可以从很多个方面去检查&#xff0c;比如测试的思路&#xff0c; 比如测试用例的覆盖度&#xff1f;&#xff0c;比如测试出bug是否能够定位到根因&#xff1f; 上面说的各个方面都很合理&#xff0c;那我们平常如何如更…

dw做网站教程视频各大搜索引擎提交入口地址

注&#xff1a;此为笔者学习狂神说SpringBoot的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 一、整合JDBC使用&#xff08;理解&#xff09; 创建项目 勾选依赖启动器 查看依赖 …

网站 续费wap网站在线生成app

这节课主要讲缓存的基本思想、缓存的优点、缓存的代价三个部分。 缓存的定义 先来看下缓存的定义。 & 缓存最初的含义&#xff0c;是指用于加速 CPU 数据交换的 RAM&#xff0c;即随机存取存储器&#xff0c;通常这种存储器使用更昂贵但快速的静态 RAM&#xff08;SRAM&…

怎样做视频直播网站wordpress关闭会员

作者&#xff1a;苏雷江摘要&#xff1a;在科技英语翻译中&#xff0c;如何正确的理解与表达英语词语对整个翻译过程起着至关重要的作用。本篇文章从词义的选择和词义的引申两个方面来具体阐述如何做到正确的理解与表达科技英语翻译中的英语词语。关键词&#xff1a;科技英语翻…

宁夏做网站的网页游戏软件制作专业

当涉及到网络通信时&#xff0c;OSI参考模型定义了七个层级来描述网络协议和通讯过程。以下是对每个层级的详细介绍&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a; 物理层负责将比特流传输到物理媒介上。确定电压、光信号等传输细节&#xff0c;并定义…

淄博网站制作定制视觉国家企业查询官网入口

I love exam 不知道为啥刚开始不写&#xff0c;那么简单的背包预处理dp&#xff0c;太菜了吧 fi,jf_{i,j}fi,j​对于第i门课来说花费j天得到的最大分数 gi,j,pg_{i,j,p}gi,j,p​考虑前i门课&#xff0c;花费j天复习得到的最大分数 #include<bits/stdc.h> using namespa…

网站建设 硬件投入网站安全检测服务

前几天部署Exchange2010时建立了几个通讯组邮箱&#xff0c;测试下来发现只有exchange内部组员进行邮件交流没有问题&#xff0c;外网发送到组邮箱时会收到#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##的错误&#xff0c;当时没有找出问题原因&#xff0…

网站设计方案图事件营销ppt

没有服务器和公网IP&#xff0c;想要其他人访问自己做好的网站&#xff0c;使用这款简单免费的内网穿透小工具——ngrok&#xff0c;有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址&#xff1a;ngrok | Unified Application Delivery Platform for Developers&#x…

上海金山网站设计公司荣耀手机官网入口

不润湿(Nonwetting)/润湿不良(Poor Wetting) 通常润湿不良是指焊点焊锡合金没有很好的铺展开来,从而无法得到良好的焊点并直接影响到焊点的可靠性。 产生原因: 1. 焊盘或引脚表面的镀层被氧化,氧化层的存在阻挡了焊锡与镀层之间的接触; 2. 镀层厚度不够或是加工不良,很…

让家里的电脑做网站服务器连江建设局网站

谁年轻的时候没有遇见过几个渣男&#xff1f;没有买错过几双不合尺码的鞋子&#xff1f;渣男无法巧避&#xff0c;但是买到不合尺码的鞋子这样的囧事倒是可以有效避免的。下面一起来了解下鞋子尺码的量法吧。工具&#xff1a;纸张、笔步骤&#xff1a;1、赤脚踩在白纸上&#x…

人才招聘网站怎么做免费申请qq号

前言 由于最近打算交叉编译 python&#xff0c;依赖 libffi 库&#xff0c;而交叉编译 libffi 库&#xff0c;由于使用的是 github 上的 libffi&#xff0c;又提示 autoconf 版本太低了&#xff0c;所以&#xff0c;先更新 autoconf 的版本 当前 ubuntu 20.04 上安装的 autuco…

电商网站建设的特点营销推广的主要方法

关于 Logback 日志系统是一个线上项目必备的素质之一&#xff0c;代表性的日志框架 Log4j、SLF4J、Logback 这哥仨竟然是亲兄弟&#xff0c;他们有一个亲爹&#xff0c;那就是巨佬 Ceki Gulcu。 由于 Spring Boot 的默认日志框架选用的 Logback&#xff0c;再加上 Log4j2 之前…

一个网站绑定两个域名企业画册宣传设计

博主推荐延展咨询资深顾问 沈靓文章 装备制造企业产品具有单件产值大、技术含量高、生产周期长、完全个性化生产的特点&#xff0c;伴随着制造业整体水平的提高&#xff0c;近几年又兴起了异地制造、移动工厂等模式&#xff0c;而装备制造业现有的管理方式和信息化水平多不能适…