HTTP.sys webového serveru v ASP.NET Core
HTTP.sys je webový server pro ASP.NET Core, který běží jenom na Windows. HTTP.sys je alternativou k serveru a Kestrel nabízí některé funkce, Kestrel které neposkytuje.
Důležité
HTTP.sys není kompatibilní s modulem ASP.NET Core Module a nelze ho použít se službou IIS nebo IIS Express.
HTTP.sys podporuje následující funkce:
- Ověřování systému Windows
- Sdílení portů
- HTTPS s SNI
- HTTP/2 přes protokol TLS (Windows 10 nebo novější)
- Přímý přenos souborů
- Ukládání odpovědí do mezipaměti
- WebSockets (Windows 8 nebo novější)
Podporované Windows verze:
- Windows 7 nebo novější
- Windows Server 2008 R2 nebo novější
Zobrazení nebo stažení ukázkového kódu (stažení)
Kdy použít HTTP.sys
HTTP.sys je užitečná pro nasazení, kde:
Server je potřeba zveřejnit přímo na internetu bez použití služby IIS.

Interní nasazení vyžaduje funkci, která není dostupná v Kestrel nástroji . Další informace najdete v Kestrel tématu vs. HTTP.sys

HTTP.sys vyspělá technologie, která chrání před mnoha typy útoků a poskytuje odolnost, zabezpečení a škálovatelnost plně vybaveného webového serveru. Služba IIS samotná běží jako naslouchací proces HTTP nad HTTP.sys.
Podpora HTTP/2
Protokol HTTP/2 je povolený ASP.NET Core aplikací, pokud jsou splněny následující základní požadavky:
- Windows Server 2016/Windows 10 nebo novější
- Připojení s vyjednáváním protokolu aplikační vrstvy (UDPN)
- Připojení TLS 1.2 nebo novější
Pokud je vytvořeno připojení HTTP/2, protokol HttpRequest.Protocol hlásí HTTP/2 .
Ve výchozím nastavení je povolený protokol HTTP/2. Pokud není připojení HTTP/2 na navázat, připojení se vrátí zpět na HTTP/1.1. V budoucí verzi služby Windows budou k dispozici příznaky konfigurace HTTP/2, včetně možnosti zakázat HTTP/2 pomocí HTTP.sys.
Podpora HTTP/3
Protokol HTTP/3 je povolený ASP.NET Core aplikací, pokud jsou splněny následující základní požadavky:
- Windows Server 2022/Windows 11 nebo novější
- Použije
httpsse vazba adresy URL. - Je nastavený klíč registru EnableHttp3.
Předchozí verze Windows 11 sestavení mohou vyžadovat použití sestavení Windows Insider.
Http/3 se prostřednictvím hlavičky objeví jako upgrade z HTTP/1.1 nebo alt-svc HTTP/2. To znamená, že první požadavek bude před přepnutím na HTTP/3 normálně používat HTTP/1.1 nebo HTTP/2. Http.Sys nepřidá alt-svc hlavičku automaticky, musí ji přidat aplikace. Následující kód je příkladem middlewaru, který přidá alt-svc hlavičku odpovědi.
app.Use((context, next) =>
{
context.Response.Headers.AltSvc = "h3=\":443\"";
return next(context);
});
Umístěte předchozí kód na začátek kanálu požadavku.
Http.Sys také odesílání zprávy protokolu HTTP/2 AltSvc místo hlavičky odpovědi, která klientovi oznámí, že je k dispozici protokol HTTP/3. Viz klíč registru EnableAltSvc. Všimněte si, že to vyžaduje vazby netsh sslcert, které místo IP adres používají názvy hostitelů.
Ověřování v režimu jádra pomocí protokolu Kerberos
HTTP.sys deleguje na ověřování v režimu jádra pomocí ověřovacího protokolu Kerberos. Ověřování v uživatelském režimu není podporováno protokolem Kerberos a HTTP.sys. Účet počítače se musí použít k dešifrování tokenu nebo lístku Kerberos získaného ze služby Active Directory a předáných klientem serveru k ověření uživatele. Zaregistrujte hlavní název služby (SPN) pro hostitele, ne pro uživatele aplikace.
Jak používat HTTP.sys
Konfigurace ASP.NET Core aplikace pro použití HTTP.sys
Při sestavování UseHttpSys hostitele volejte metodu rozšíření a zadejte všechny požadované . HttpSysOptions Následující příklad nastaví možnosti na výchozí hodnoty:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.AllowSynchronousIO = false;
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:5005");
});
webBuilder.UseStartup<Startup>();
});
Další HTTP.sys konfigurace se zpracovávají prostřednictvím nastavení registru.
HTTP.sys možnosti
| Vlastnost | Popis | Výchozí |
|---|---|---|
| AllowSynchronousIO | Určuje, jestli je pro a povolený synchronní HttpContext.Request.Body HttpContext.Response.Body vstup/výstup. |
false |
| Authentication.AllowAnonymous | Povolit anonymní požadavky. | true |
| Authentication.Schemes | Zadejte povolená schémata ověřování. Před odznáním naslouchacího procesu je možné ho kdykoli upravit. Hodnoty poskytuje výčet AuthenticationSchemes: Basic , Kerberos , , a Negotiate None NTLM . |
None |
| EnableResponseCaching | Pokuste se o ukládání odpovědí do mezipaměti v režimu jádra s oprávněnými hlavičkami. Odpověď nemusí obsahovat Set-Cookie Vary hlavičky , Pragma nebo . Musí obsahovat Cache-Control hlavičku , která je public a hodnota nebo nebo shared-max-age max-age Expires hlavička. |
true |
| Http503Verbosity | Toto HTTP.sys chování při zamítání požadavků kvůli podmínkám omezování. | Http503VerbosityLevel. Základní |
| MaxAccepts | Maximální počet souběžných požadavků. | 5 × Prostředí. ProcessorCount |
| MaxConnections | Maximální počet souběžných připojení, která je nutné přijmout. Používejte -1 pro nekonečné. Pomocí null použijte nastavení registru pro celé počítače. |
null(pro celé počítače (nastavení) |
| MaxRequestBodySize | Viz část MaxRequestBodySize. | 30000000 bajtů (~28,6 MB) |
| RequestQueueLimit | Maximální počet požadavků, které lze zařadit do fronty. | 1000 |
RequestQueueMode |
To určuje, jestli server zodpovídá za vytvoření a konfiguraci fronty požadavků nebo jestli se má připojit k existující frontě. Většina existujících možností konfigurace se při připojování k existující frontě nepoužije. |
RequestQueueMode.Create |
RequestQueueName |
Název fronty HTTP.sys požadavků. | null (Anonymní fronta) |
| ThrowWriteExceptions | Určete, jestli zápisy textu odpovědi, které selžou z důvodu odpojení klienta, by měly vyvolat výjimky nebo by se měly dokončit normálně. | false(normálně dokončeno) |
| Timeouts | Zpřístupňuje HTTP.sys TimeoutManager konfigurace, která může být také nakonfigurována v registru. Další informace o jednotlivých nastaveních, včetně výchozích hodnot, najdete na odkazech rozhraní API:
|
|
| UrlPrefixes | Zadejte, kam se UrlPrefixCollection má zaregistrovat HTTP.sys. Nejužitečnější je UrlPrefixCollection.Add , který se používá k přidání předpony do kolekce. Ty mohou být kdykoliv změněny předtím, než se naslouchací proces vyřazuje. |
MaxRequestBodySize
Maximální povolená velikost libovolného textu žádosti v bajtech Při nastavení na null je maximální velikost textu požadavku neomezená. Toto omezení nemá žádný vliv na upgradovaná připojení, která jsou vždycky neomezená.
doporučená metoda pro přepsání limitu v aplikaci ASP.NET Core MVC pro jeden IActionResult je použít RequestSizeLimitAttribute atribut pro metodu akce:
[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()
Výjimka je vyvolána, pokud se aplikace pokusí nakonfigurovat limit žádosti poté, co aplikace začne číst požadavek. IsReadOnlyVlastnost může být použita k označení MaxRequestBodySize , zda je vlastnost ve stavu jen pro čtení, což znamená, že je příliš pozdě pro konfiguraci limitu.
Pokud by měla aplikace přepsat MaxRequestBodySize jednotlivé požadavky, použijte IHttpMaxRequestBodySizeFeature :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILogger<Startup> logger, IServer server)
{
app.Use(async (context, next) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var serverAddressesFeature =
app.ServerFeatures.Get<IServerAddressesFeature>();
var addresses = string.Join(", ", serverAddressesFeature?.Addresses);
logger.LogInformation("Addresses: {Addresses}", addresses);
await next.Invoke();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
pokud používáte Visual Studio, ujistěte se, že aplikace není nakonfigurovaná tak, aby spouštěla službu IIS nebo IIS Express.
v Visual Studio je výchozím spouštěcím profilem IIS Express. Chcete-li spustit projekt jako konzolovou aplikaci, ručně změňte vybraný profil, jak je znázorněno na následujícím snímku obrazovky:

konfigurace serveru Windows
určete porty, které se mají otevřít pro aplikaci, a pomocí rutiny Windows firewall nebo rutiny New-NetFirewallRule prostředí PowerShell otevřete porty brány firewall, aby bylo možné dosáhnout HTTP.sys provozu. V následujících příkazech a konfiguraci aplikace se používá port 443.
Při nasazování na virtuální počítač Azure otevřete porty ve skupině zabezpečení sítě. V následujících příkazech a konfiguraci aplikace se používá port 443.
V případě potřeby Získejte a nainstalujte certifikáty X. 509.
v Windows vytvořte pomocí rutiny prostředí PowerShell New-SelfSignedCertificatecertifikáty podepsané svým držitelem. Nepodporovaný příklad naleznete v tématu UpdateIISExpressSSLForChrome.ps1.
Nainstalujte certifikáty podepsané svým držitelem nebo certifikátem podepsaným certifikační autoritou do osobního úložiště místního počítače serveru > .
pokud se jedná o nasazení závislé na rozhraní, nainstalujte rozhraní .net core, .NET Framework nebo obojí (pokud je aplikace aplikace .net core cílící na .NET Framework).
- .NET Core: Pokud aplikace vyžaduje .NET Core, Získejte a spusťte instalační program modulu runtime .NET Core ze souborů ke stažení pro .NET Core. Neinstalujte na server plnou sadu SDK.
- .NET Framework: pokud aplikace vyžaduje .NET Framework, přečtěte si téma průvodce instalací .NET Framework. Nainstalujte požadovanou .NET Framework. instalační program pro nejnovější .NET Framework je k dispozici na stránce soubory ke stažení pro .net Core .
Pokud je aplikace samostatným nasazením, aplikace zahrne modul runtime do svého nasazení. Na serveru není nutná žádná instalace rozhraní.
Konfigurace adres URL a portů v aplikaci
ve výchozím nastavení ASP.NET Core váže
http://localhost:5000. Pokud chcete nakonfigurovat předpony a porty adresy URL, můžete použít tyto možnosti:- UseUrls
urlsargument příkazového řádkuASPNETCORE_URLSProměnná prostředí- UrlPrefixes
Následující příklad kódu ukazuje, jak používat UrlPrefixes s místní IP adresou serveru
10.0.0.4na portu 443:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.UrlPrefixes.Add("https://10.0.0.4:443"); }); webBuilder.UseStartup<Startup>(); });Výhodou
UrlPrefixesje, že se okamžitě generuje chybová zpráva pro nesprávně naformátované předpony.Nastavení v
UrlPrefixesUseUrls/urls/ASPNETCORE_URLSNastavení přepsání Proto je výhodouUseUrlsurlsproměnné prostředí, aASPNETCORE_URLSjednodušší přepínání mezi Kestrel a HTTP.sys.HTTP.sys používá formáty řetězce UrlPrefix HTTP serveru API.
Upozornění
Nelze použít vazby zástupných znaků na nejvyšší úrovni (
http://*:80/ahttp://+:80). Vazby na zástupné znaky na nejvyšší úrovni vytvoří chyby zabezpečení aplikace. To platí pro silné i slabé zástupné znaky. Místo zástupných znaků použijte explicitní názvy hostitelů nebo IP adresy. Vazba zástupných znaků subdomény (například*.mysub.com) není bezpečnostní riziko, pokud ovládáte celou nadřazenou doménu (na rozdíl od*.com, která je zranitelná). Další informace najdete v dokumentu RFC 7230: oddíl 5,4: Host.Předregistrujte předpony adresy URL na serveru.
K disnetsh.exe je integrovaný nástroj pro konfiguraci HTTP.sys. netsh.exe se používá k rezervaci předpon adres URL a přiřazování certifikátů X. 509. Nástroj vyžaduje oprávnění správce.
K registraci adres URL aplikace použijte nástroj netsh.exe :
netsh http add urlacl url=<URL> user=<USER><URL>: Plně kvalifikované adresy URL (Uniform Resource Locator). Nepoužívejte vazbu zástupných znaků. Použijte platný název hostitele nebo místní IP adresu. Adresa URL musí obsahovat koncové lomítko.<USER>: Určuje název uživatele nebo skupiny uživatelů.
V následujícím příkladu je místní IP adresa serveru
10.0.0.4:netsh http add urlacl url=https://10.0.0.4:443/ user=UsersKdyž je adresa URL registrována, nástroj odpoví
URL reservation successfully added.Pokud chcete odstranit registrovanou adresu URL, použijte
delete urlaclpříkaz:netsh http delete urlacl url=<URL>Zaregistrujte certifikáty X. 509 na serveru.
K registraci certifikátů pro aplikaci použijte nástroj netsh.exe :
netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"<IP>: Určuje místní IP adresu pro vazbu. Nepoužívejte vazbu zástupných znaků. Použijte platnou IP adresu.<PORT>: Určuje port pro vazbu.<THUMBPRINT>: Kryptografický otisk certifikátu X. 509.<GUID>: Identifikátor GUID generovaný vývojářem, který představuje aplikaci pro informativní účely.
Pro referenční účely uložte identifikátor GUID do aplikace jako značku balíčku:
- V Visual Studio:
- Otevřete vlastnosti projektu aplikace tak, že kliknete pravým tlačítkem na aplikaci v Průzkumník řešení a vyberete vlastnosti.
- Vyberte kartu balíček .
- Zadejte identifikátor GUID, který jste vytvořili v poli značky .
- Pokud nepoužíváte Visual Studio:
Otevřete soubor projektu aplikace.
Přidejte
<PackageTags>vlastnost do nového nebo existujícího<PropertyGroup>s identifikátorem GUID, který jste vytvořili:<PropertyGroup> <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags> </PropertyGroup>
V následujícím příkladu:
- Místní IP adresa serveru je
10.0.0.4. - Generátor náhodných identifikátorů GUID online poskytuje
appidhodnotu.
netsh http add sslcert ipport=10.0.0.4:443 certhash=b66ee04419d4ee37464ab8785ff02449980eae10 appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"Když je certifikát zaregistrován, nástroj odpoví
SSL Certificate successfully added.K odstranění registrace certifikátu použijte
delete sslcertpříkaz:netsh http delete sslcert ipport=<IP>:<PORT>Referenční dokumentace pro netsh.exe:
Spusťte aplikaci.
Oprávnění správce nejsou nutná ke spuštění aplikace při vytváření vazby na localhost pomocí protokolu HTTP (ne HTTPS) s číslem portu větším než 1024. U ostatních konfigurací (například pomocí místní IP adresy nebo vazby na port 443) spusťte aplikaci s oprávněními správce.
Aplikace odpoví na veřejnou IP adresu serveru. V tomto příkladu je server dosažitelný z Internetu na jeho veřejné IP adrese
104.214.79.47.V tomto příkladu se používá vývojový certifikát. Stránka se načte bezpečně po obejít upozornění na nedůvěryhodný certifikát v prohlížeči.

Scénáře proxy serveru a nástroje pro vyrovnávání zatížení
Pro aplikace hostované HTTP.sys, které komunikují s požadavky z Internetu nebo podnikové sítě, se může při hostování za proxy servery a nástroji pro vyrovnávání zatížení vyžadovat další konfigurace. další informace najdete v tématu konfigurace ASP.NET Core pro práci se servery proxy a nástroji pro vyrovnávání zatížení.
Pokročilé funkce HTTP/2 pro podporu gRPC
Další funkce HTTP/2 v HTTP.sys gRPC, včetně podpory pro hlavičky odpovědí a odesílání snímků resetování.
Požadavky na spuštění gRPC s HTTP.sys:
- Windows 10, build operačního systému 19041.508 nebo novější
- Připojení TLS 1.2 nebo novější
Přívěsy
Hlavičky HTTP se podobají hlavičkám HTTP s tím rozdílem, že se odesílaly po odeslání textu odpovědi. Pro IIS a HTTP.sys se podporují pouze hlavičky s odpovědí HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
V předchozím příkladu kódu:
SupportsTrailerszajišťuje, že odpověď podporuje upoutávky.DeclareTrailerpřidá do hlavičky odpovědi danýTrailernázev hlavičky. Deklarování upoutávky odpovědi je volitelné, ale doporučuje se. PokudDeclareTrailerje volána, musí být před odesláním hlaviček odpovědi.AppendTrailerpřipojí upoutávku.
Resetovat
Resetování umožňuje serveru resetovat požadavek HTTP/2 se zadaným kódem chyby. Žádost o resetování se považuje za přerušenou.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset v předchozím příkladu kódu určuje INTERNAL_ERROR kód chyby. Další informace o kódech chyb HTTP/2 najdete v části kód chyby specifikace HTTP/2.
Další zdroje informací
HTTP.sys je webový server pro ASP.NET Core, který běží jenom na Windows. HTTP.sys je alternativou Kestrel k serveru a nabízí některé funkce, Kestrel které neposkytuje.
Důležité
HTTP.sys není kompatibilní s modulem ASP.NET Core a nelze ho použít se službou IIS nebo IIS Express.
HTTP.sys podporuje následující funkce:
- Ověřování systému Windows
- Sdílení portů
- HTTPS s SNI
- HTTP/2 přes protokol TLS (Windows 10 nebo novější)
- Přímý přenos souborů
- Ukládání odpovědí do mezipaměti
- WebSockets (Windows 8 nebo novější)
Podporované Windows verze:
- Windows 7 nebo novější
- Windows Server 2008 R2 nebo novější
Zobrazení nebo stažení ukázkového kódu (stažení)
Kdy použít HTTP.sys
HTTP.sys je užitečná pro nasazení, kde:
Server je potřeba zveřejnit přímo na internetu bez použití služby IIS.

Interní nasazení vyžaduje funkci, která není dostupná v Kestrel nástroji . Další informace najdete v Kestrel tématu vs. HTTP.sys

HTTP.sys vyspělá technologie, která chrání před mnoha typy útoků a poskytuje odolnost, zabezpečení a škálovatelnost plně vybaveného webového serveru. Samotná služba IIS běží jako naslouchací proces HTTP nad HTTP.sys.
Podpora HTTP/2
Protokol HTTP/2 je pro ASP.NET Core povolený, pokud jsou splněny následující základní požadavky:
- Windows Server 2016/Windows 10 nebo novější
- Připojení s vyjednáváním protokolu aplikační vrstvy (UDPN)
- Připojení TLS 1.2 nebo novější
Pokud je vytvořeno připojení HTTP/2, protokol HttpRequest.Protocol hlásí HTTP/2 .
Ve výchozím nastavení je povolený protokol HTTP/2. Pokud není připojení HTTP/2 na navázat, připojení se vrátí zpět na HTTP/1.1. V budoucí verzi služby Windows budou k dispozici příznaky konfigurace HTTP/2, včetně možnosti zakázat HTTP/2 pomocí HTTP.sys.
Ověřování v režimu jádra pomocí protokolu Kerberos
HTTP.sys deleguje na ověřování v režimu jádra pomocí ověřovacího protokolu Kerberos. Ověřování v uživatelském režimu není podporováno protokolem Kerberos a HTTP.sys. Účet počítače se musí použít k dešifrování tokenu nebo lístku Kerberos získaného ze služby Active Directory a předáných klientem serveru k ověření uživatele. Zaregistrujte hlavní název služby (SPN) pro hostitele, ne pro uživatele aplikace.
Jak používat HTTP.sys
Konfigurace ASP.NET Core aplikace pro použití HTTP.sys
Při sestavování UseHttpSys hostitele volejte metodu rozšíření a zadejte všechny požadované . HttpSysOptions Následující příklad nastaví možnosti na výchozí hodnoty:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.AllowSynchronousIO = false;
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:5005");
});
webBuilder.UseStartup<Startup>();
});
Další HTTP.sys konfigurace se zpracovávají prostřednictvím nastavení registru.
HTTP.sys možnosti
| Vlastnost | Popis | Výchozí |
|---|---|---|
| AllowSynchronousIO | Určuje, jestli je pro a povolený synchronní HttpContext.Request.Body HttpContext.Response.Body vstup/výstup. |
false |
| Authentication.AllowAnonymous | Povolit anonymní požadavky. | true |
| Authentication.Schemes | Zadejte povolená schémata ověřování. Před odznáním naslouchacího procesu je možné ho kdykoli upravit. Hodnoty poskytuje výčet AuthenticationSchemes: Basic , Kerberos , , a Negotiate None NTLM . |
None |
| EnableResponseCaching | Pokuste se o ukládání odpovědí do mezipaměti v režimu jádra s oprávněnými hlavičkami. Odpověď nemusí obsahovat Set-Cookie Vary hlavičky , Pragma nebo . Musí obsahovat Cache-Control hlavičku , která je public a hodnota nebo nebo shared-max-age max-age Expires hlavička. |
true |
| Http503Verbosity | Toto HTTP.sys chování při zamítání požadavků kvůli podmínkám omezování. | Http503VerbosityLevel. Základní |
| MaxAccepts | Maximální počet souběžných požadavků. | 5 × Prostředí. ProcessorCount |
| MaxConnections | Maximální počet souběžných připojení, která je nutné přijmout. Používejte -1 pro nekonečné. Pomocí null použijte nastavení registru pro celé počítače. |
null(pro celé počítače (nastavení) |
| MaxRequestBodySize | Viz část MaxRequestBodySize. | 30000000 bajtů (~28,6 MB) |
| RequestQueueLimit | Maximální počet požadavků, které lze zařadit do fronty. | 1000 |
RequestQueueMode |
To určuje, jestli server zodpovídá za vytvoření a konfiguraci fronty požadavků nebo jestli se má připojit k existující frontě. Většina existujících možností konfigurace se při připojování k existující frontě nepoužije. |
RequestQueueMode.Create |
RequestQueueName |
Název fronty HTTP.sys požadavků. | null (Anonymní fronta) |
| ThrowWriteExceptions | Určete, jestli zápisy textu odpovědi, které selžou z důvodu odpojení klienta, by měly vyvolat výjimky nebo by se měly dokončit normálně. | false(normálně dokončeno) |
| Timeouts | Zpřístupňuje HTTP.sys TimeoutManager konfigurace, která může být také nakonfigurována v registru. Další informace o jednotlivých nastaveních, včetně výchozích hodnot, najdete na odkazech rozhraní API:
|
|
| UrlPrefixes | Zadejte pro UrlPrefixCollection registraci do HTTP.sys. Nejužitečnější UrlPrefixCollection.Add je , který se používá k přidání předpony do kolekce. Tyto změny je možné kdykoli upravit před tím, než se naslouchací proces odsoudí. |
MaxRequestBodySize
Maximální povolená velikost libovolného textu žádosti v bajtech Při nastavení na null je maximální velikost textu požadavku neomezená. Toto omezení nemá žádný vliv na upgradovaná připojení, která jsou vždycky neomezená.
doporučená metoda pro přepsání limitu v aplikaci ASP.NET Core MVC pro jeden IActionResult je použít RequestSizeLimitAttribute atribut pro metodu akce:
[RequestSizeLimit(100000000)]
public IActionResult MyActionMethod()
Výjimka je vyvolána, pokud se aplikace pokusí nakonfigurovat limit žádosti poté, co aplikace začne číst požadavek. IsReadOnlyVlastnost může být použita k označení MaxRequestBodySize , zda je vlastnost ve stavu jen pro čtení, což znamená, že je příliš pozdě pro konfiguraci limitu.
Pokud by měla aplikace přepsat MaxRequestBodySize jednotlivé požadavky, použijte IHttpMaxRequestBodySizeFeature :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
ILogger<Startup> logger, IServer server)
{
app.Use(async (context, next) =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>()
.MaxRequestBodySize = 10 * 1024;
var serverAddressesFeature =
app.ServerFeatures.Get<IServerAddressesFeature>();
var addresses = string.Join(", ", serverAddressesFeature?.Addresses);
logger.LogInformation("Addresses: {Addresses}", addresses);
await next.Invoke();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
pokud používáte Visual Studio, ujistěte se, že aplikace není nakonfigurovaná tak, aby spouštěla službu IIS nebo IIS Express.
v Visual Studio je výchozím spouštěcím profilem IIS Express. Chcete-li spustit projekt jako konzolovou aplikaci, ručně změňte vybraný profil, jak je znázorněno na následujícím snímku obrazovky:

konfigurace serveru Windows
určete porty, které se mají otevřít pro aplikaci, a pomocí rutiny Windows firewall nebo rutiny New-NetFirewallRule prostředí PowerShell otevřete porty brány firewall, aby bylo možné dosáhnout HTTP.sys provozu. V následujících příkazech a konfiguraci aplikace se používá port 443.
Při nasazování na virtuální počítač Azure otevřete porty ve skupině zabezpečení sítě. V následujících příkazech a konfiguraci aplikace se používá port 443.
V případě potřeby Získejte a nainstalujte certifikáty X. 509.
v Windows vytvořte pomocí rutiny prostředí PowerShell New-SelfSignedCertificatecertifikáty podepsané svým držitelem. Nepodporovaný příklad naleznete v tématu UpdateIISExpressSSLForChrome.ps1.
Nainstalujte certifikáty podepsané svým držitelem nebo certifikátem podepsaným certifikační autoritou do osobního úložiště místního počítače serveru > .
pokud se jedná o nasazení závislé na rozhraní, nainstalujte rozhraní .net core, .NET Framework nebo obojí (pokud je aplikace aplikace .net core cílící na .NET Framework).
- .NET Core: Pokud aplikace vyžaduje .NET Core, Získejte a spusťte instalační program modulu runtime .NET Core ze souborů ke stažení pro .NET Core. Neinstalujte na server plnou sadu SDK.
- .NET Framework: pokud aplikace vyžaduje .NET Framework, přečtěte si téma průvodce instalací .NET Framework. Nainstalujte požadovanou .NET Framework. instalační program pro nejnovější .NET Framework je k dispozici na stránce soubory ke stažení pro .net Core .
Pokud je aplikace samostatným nasazením, aplikace zahrne modul runtime do svého nasazení. Na serveru není nutná žádná instalace rozhraní.
Konfigurace adres URL a portů v aplikaci
ve výchozím nastavení ASP.NET Core váže
http://localhost:5000. Pokud chcete nakonfigurovat předpony a porty adresy URL, můžete použít tyto možnosti:- UseUrls
urlsargument příkazového řádkuASPNETCORE_URLSProměnná prostředí- UrlPrefixes
Následující příklad kódu ukazuje, jak používat UrlPrefixes s místní IP adresou serveru
10.0.0.4na portu 443:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.UrlPrefixes.Add("https://10.0.0.4:443"); }); webBuilder.UseStartup<Startup>(); });Výhodou
UrlPrefixesje, že se okamžitě generuje chybová zpráva pro nesprávně naformátované předpony.Nastavení v
UrlPrefixesUseUrls/urls/ASPNETCORE_URLSNastavení přepsání Proto je výhodouUseUrlsurlsproměnné prostředí, aASPNETCORE_URLSjednodušší přepínání mezi Kestrel a HTTP.sys.HTTP.sys používá formáty řetězce UrlPrefix HTTP serveru API.
Upozornění
Nelze použít vazby zástupných znaků na nejvyšší úrovni (
http://*:80/ahttp://+:80). Vazby na zástupné znaky na nejvyšší úrovni vytvoří chyby zabezpečení aplikace. To platí pro silné i slabé zástupné znaky. Místo zástupných znaků použijte explicitní názvy hostitelů nebo IP adresy. Vazba zástupných znaků subdomény (například*.mysub.com) není bezpečnostní riziko, pokud ovládáte celou nadřazenou doménu (na rozdíl od*.com, která je zranitelná). Další informace najdete v dokumentu RFC 7230: oddíl 5,4: Host.Předregistrujte předpony adresy URL na serveru.
K disnetsh.exe je integrovaný nástroj pro konfiguraci HTTP.sys. netsh.exe se používá k rezervaci předpon adres URL a přiřazování certifikátů X. 509. Nástroj vyžaduje oprávnění správce.
K registraci adres URL aplikace použijte nástroj netsh.exe :
netsh http add urlacl url=<URL> user=<USER><URL>: Plně kvalifikované adresy URL (Uniform Resource Locator). Nepoužívejte vazbu zástupných znaků. Použijte platný název hostitele nebo místní IP adresu. Adresa URL musí obsahovat koncové lomítko.<USER>: Určuje název uživatele nebo skupiny uživatelů.
V následujícím příkladu je místní IP adresa serveru
10.0.0.4:netsh http add urlacl url=https://10.0.0.4:443/ user=UsersKdyž je adresa URL registrována, nástroj odpoví
URL reservation successfully added.Pokud chcete odstranit registrovanou adresu URL, použijte
delete urlaclpříkaz:netsh http delete urlacl url=<URL>Zaregistrujte certifikáty X. 509 na serveru.
K registraci certifikátů pro aplikaci použijte nástroj netsh.exe :
netsh http add sslcert ipport=<IP>:<PORT> certhash=<THUMBPRINT> appid="{<GUID>}"<IP>: Určuje místní IP adresu pro vazbu. Nepoužívejte vazbu zástupných znaků. Použijte platnou IP adresu.<PORT>: Určuje port pro vazbu.<THUMBPRINT>: Kryptografický otisk certifikátu X. 509.<GUID>: Identifikátor GUID generovaný vývojářem, který představuje aplikaci pro informativní účely.
Pro referenční účely uložte identifikátor GUID do aplikace jako značku balíčku:
- V Visual Studio:
- Otevřete vlastnosti projektu aplikace tak, že kliknete pravým tlačítkem na aplikaci v Průzkumník řešení a vyberete vlastnosti.
- Vyberte kartu balíček .
- Zadejte identifikátor GUID, který jste vytvořili v poli značky .
- Pokud nepoužíváte Visual Studio:
Otevřete soubor projektu aplikace.
Přidejte
<PackageTags>vlastnost do nového nebo existujícího<PropertyGroup>s identifikátorem GUID, který jste vytvořili:<PropertyGroup> <PackageTags>9412ee86-c21b-4eb8-bd89-f650fbf44931</PackageTags> </PropertyGroup>
V následujícím příkladu:
- Místní IP adresa serveru je
10.0.0.4. - Generátor náhodných identifikátorů GUID online poskytuje
appidhodnotu.
netsh http add sslcert ipport=10.0.0.4:443 certhash=b66ee04419d4ee37464ab8785ff02449980eae10 appid="{9412ee86-c21b-4eb8-bd89-f650fbf44931}"Když je certifikát zaregistrován, nástroj odpoví
SSL Certificate successfully added.K odstranění registrace certifikátu použijte
delete sslcertpříkaz:netsh http delete sslcert ipport=<IP>:<PORT>Referenční dokumentace pro netsh.exe:
Spusťte aplikaci.
Oprávnění správce nejsou nutná ke spuštění aplikace při vytváření vazby na localhost pomocí protokolu HTTP (ne HTTPS) s číslem portu větším než 1024. U ostatních konfigurací (například pomocí místní IP adresy nebo vazby na port 443) spusťte aplikaci s oprávněními správce.
Aplikace odpoví na veřejnou IP adresu serveru. V tomto příkladu je server dosažitelný z Internetu na jeho veřejné IP adrese
104.214.79.47.V tomto příkladu se používá vývojový certifikát. Stránka se načte bezpečně po obejít upozornění na nedůvěryhodný certifikát v prohlížeči.

Scénáře proxy serveru a nástroje pro vyrovnávání zatížení
Pro aplikace hostované HTTP.sys, které komunikují s požadavky z Internetu nebo podnikové sítě, se může při hostování za proxy servery a nástroji pro vyrovnávání zatížení vyžadovat další konfigurace. další informace najdete v tématu konfigurace ASP.NET Core pro práci se servery proxy a nástroji pro vyrovnávání zatížení.
Rozšířené funkce protokolu HTTP/2 pro podporu gRPC
Další funkce HTTP/2 v HTTP.sys podporují gRPC, včetně podpory pro přívěsy odpovědí a odesílání snímků pro resetování.
Požadavky na spuštění gRPC s HTTP.sys:
- Windows 10, Build operačního systému 19041,508 nebo novější
- Připojení TLS 1,2 nebo novější
Karoseri
Hlavičky HTTP se podobají hlavičkám HTTP s tím rozdílem, že se odesílaly po odeslání textu odpovědi. Pro IIS a HTTP.sys se podporují pouze hlavičky s odpovědí HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
V předchozím příkladu kódu:
SupportsTrailerszajišťuje, že odpověď podporuje upoutávky.DeclareTrailerpřidá do hlavičky odpovědi danýTrailernázev hlavičky. Deklarování upoutávky odpovědi je volitelné, ale doporučuje se. PokudDeclareTrailerje volána, musí být před odesláním hlaviček odpovědi.AppendTrailerpřipojí upoutávku.
Resetovat
Resetování umožňuje serveru resetovat požadavek HTTP/2 se zadaným kódem chyby. Žádost o resetování se považuje za přerušenou.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset v předchozím příkladu kódu určuje INTERNAL_ERROR kód chyby. Další informace o kódech chyb HTTP/2 najdete v části kód chyby specifikace HTTP/2.