Implementace webového serveru v ASP.NET Core
Tom Dykstra, Steve Smith, Stephen Halter a Chris
Aplikace ASP.NET Core běží s implementací serveru HTTP v procesu. Implementace serveru naslouchá požadavkům HTTP a předá je aplikaci jako sadu funkcí požadavků, které se skládají z HttpContext .
ASP.NET Core se dodává s následujícím:
- Kestrel server je výchozí implementace serveru HTTP pro více platforem. Kestrel poskytuje nejlepší výkon a využití paměti, ale nemá některé pokročilé funkce v HTTP.sys. Další informace najdete v Kestrel tématu vs. HTTP.sys v další části.
- Server HTTP služby IIS je procesový server pro službu IIS.
- HTTP.sys server je Windows HTTP server založený na ovladači jádraHTTP.sys a rozhraní API serveru HTTP.
Při použití služby IIS nebo IIS Expressspustí aplikace:
- Ve stejném procesu jako pracovní proces služby IIS (modelhostování v procesu) se serverem HTTP služby IIS. Doporučená konfigurace je v procesu.
- V procesu odděleném od pracovního procesu služby IIS (modelhostování mimo proces) se Kestrel serverem.
Modul ASP.NET Core je nativní modul služby IIS, který zpracovává nativní požadavky služby IIS mezi službou IIS a serverem HTTP služby IIS v procesu nebo Kestrel . Další informace naleznete v tématu Modul ASP.NET Core.
Kestrel vs. HTTP.sys
Kestrel má oproti této možnosti HTTP.sys:
- Lepší výkon a využití paměti.
- Pro více platforem
- Agilita se vyvíjí a opravuje nezávisle na operačním systému.
- Programový port a konfigurace protokolu TLS
- Rozšiřitelnost, která umožňuje protokoly, jako jsou PPv2 a alternativní přenosy.
Http.Sys funguje jako součást režimu sdíleného jádra s následujícími funkcemi, které Kestrel nemá:
- Sdílení portů
- Ověřování oken v režimu jádra. Kestrel podporuje pouze ověřování v uživatelském režimu.
- Rychlé proxy prostřednictvím přenosů front
- Přímý přenos souborů
- Ukládání odpovědí do mezipaměti
Modely hostingu
Při hostování v procesu ASP.NET Core aplikace ve stejném procesu jako pracovní proces služby IIS. Hostování v procesu poskytuje lepší výkon při hostování mimo proces, protože požadavky nejsou přes přesximované přes adaptér zpětné smyčky, síťové rozhraní, které vrací odchozí síťový provoz zpět do stejného počítače. Služba IIS zpracovává správu procesů pomocí Windows was (Process Activation Service).
Při hostování mimo proces ASP.NET Core aplikace běží v procesu odděleném od pracovního procesu služby IIS a modul zpracovává správu procesů. Modul spustí proces pro aplikaci ASP.NET Core při doručení prvního požadavku a restartuje aplikaci, pokud se vypne nebo dojde k chybě. Jedná se v podstatě o stejné chování jako u aplikací, které běží v procesu spravované službou aktivace Windows procesem (WAS).
Další informace a pokyny ke konfiguraci najdete v následujících tématech:
Kestrel
Kestrel server je výchozí implementace serveru HTTP pro více platforem. Kestrel poskytuje nejlepší výkon a využití paměti, ale nemá některé pokročilé funkce v HTTP.sys. Další informace najdete v Kestrel tématu vs. HTTP.sys v tomto dokumentu.
Použijte Kestrel :
Sám o sobě jako hraniční server zpracovávají požadavky přímo ze sítě, včetně internetu.

S obráceným proxy server, jako je Internetová informační služba (IIS), Nginxnebo Apache. Reverzní proxy server přijímá požadavky HTTP z internetu a předává je do Kestrel .

Konfigurace hostování s — reverzní konfigurací nebo proxy server je — podporována.
Pokyny Kestrel ke konfiguraci a informace o tom, kdy použít Kestrel v konfiguraci reverzního proxy serveru, najdete v tématu Kestrelimplementace webového serveru v ASP.NET Core .
ASP.NET Core se dodává s následujícím:
- Kestrel server je výchozí server HTTP pro více platforem.
- HTTP.sys server je Windows HTTP server založený na ovladači jádraHTTP.sys a rozhraní API serveru HTTP.
Při použití služby IIS IIS Expressse aplikace spouští v procesu odděleném od pracovního procesu služby IIS (mimo proces) se Kestrel serverem.
Protože ASP.NET Core aplikace běží v procesu odděleném od pracovního procesu služby IIS, modul se stará o správu procesů. Modul spustí proces pro aplikaci ASP.NET Core při doručení prvního požadavku a restartuje aplikaci, pokud se vypne nebo dojde k chybě. Jedná se v podstatě o stejné chování jako u aplikací, které běží v procesu spravované službou aktivace Windows procesem (WAS).
Následující diagram znázorňuje vztah mezi službou IIS, modulem ASP.NET Core Module a aplikací hostovanou mimo proces:

Požadavky přicházejí z webu do režimu jádra HTTP.sys ovladače. Ovladač směruje požadavky do služby IIS na nakonfigurovaných portech webu, obvykle 80 (HTTP) nebo 443 (HTTPS). Modul předává požadavky do na náhodném portu pro aplikaci, což není Kestrel port 80 nebo 443.
Modul určuje port prostřednictvím proměnné prostředí při spuštění a middleware integrace služby IIS nakonfiguruje server tak, aby naslouchal na http://localhost:{port} . Provádějí se další kontroly a žádosti, které nepocházejí z modulu, se zamítnou. Modul nepodporuje předávání HTTPS, takže požadavky se předá přes HTTP, i když je služba IIS přijímá přes HTTPS.
Jakmile Kestrel modul požadavek vezme, požadavek se nasadává do ASP.NET Core middlewarového kanálu. Middlewarový kanál požadavek zpracuje a předá ho jako HttpContext instanci do logiky aplikace. Middleware přidaný integrací služby IIS aktualizuje schéma, vzdálenou IP adresu a cestu tak, aby se zohlednil předávání požadavku do Kestrel . Odpověď aplikace se předá zpět do služby IIS, která ji předá zpět klientovi HTTP, který inicioval požadavek.
Pokyny ke konfiguraci služby IIS a ASP.NET Core Module najdete v následujících tématech:
Nginx s Kestrel
Informace o tom, jak používat Nginx v Linuxu jako reverzní proxy server Kestrel pro najdete v tématu Hostování ASP.NET Core v Linuxu se serverem Nginx .
Apache s Kestrel
Informace o tom, jak používat Apache v Linuxu jako reverzní proxy server Kestrel pro najdete v tématu Hostování ASP.NET Core v Linuxu pomocí Apache .
HTTP.sys
Pokud ASP.NET Core aplikace běží na Windows, HTTP.sys je alternativou k Kestrel . Kestrel se doporučuje v HTTP.sys, pokud aplikace nevyžaduje funkce, které nejsou dostupné v Kestrel . Další informace naleznete v tématu HTTP.sys webového serveru v ASP.NET Core.

HTTP.sys lze použít také pro aplikace, které jsou vystavené pouze interní síti.

Pokyny HTTP.sys najdete v tématu HTTP.sys webového serveru v ASP.NET Core .
ASP.NET Core serverové infrastruktury
Vlastnost IApplicationBuilder , která je k dispozici v Startup.Configure ServerFeatures metodě , zpřístupňuje vlastnost typu IFeatureCollection . Kestrel a HTTP.sys každou z nich zpřístupňuje jenom jednu funkci, ale další funkce mohou být k dispozici v různých IServerAddressesFeature implementacích serveru.
IServerAddressesFeature lze použít k vyhledání portu, který implementace serveru vázla za běhu.
Vlastní servery
Pokud předdefinované servery nesplňuje požadavky aplikace, je možné vytvořit vlastní implementaci serveru. Průvodce rozhraním Open Web Interface for .NET (Owin) ukazuje, jak psát implementaci založenou na Nowin IServer . Jenom rozhraní funkcí, které aplikace používá, vyžadují implementaci, ale minimálně IHttpRequestFeature a IHttpResponseFeature musí být podporovaná.
Spuštění serveru
Server se spustí, když integrované vývojové prostředí (IDE) nebo editor spustí aplikaci:
- Visual Studio: spouštěcí profily lze použít ke spuštění aplikace a serveru s buď / modulem IIS Express ASP.NET Core nebo konzolou.
- Visual Studio Code: aplikace a server jsou spuštěné nástrojem Omnisharp, který aktivuje ladicí program CoreCLR.
- Visual Studio pro Mac: aplikace a server jsou spouštěny pomocí ladicího programu Mono Soft-Mode.
Při spuštění aplikace z příkazového řádku ve složce projektu spustí příkaz dotnet spuštění aplikace a serveru ( Kestrel pouze HTTP.sys). Konfigurace je určena -c|--configuration možností, která je nastavena na hodnotu Debug (výchozí) nebo Release .
launchSettings.jsv souboru poskytuje konfiguraci při spouštění aplikace pomocí dotnet run nástroje nebo s ladicím programem integrovaným do nástrojů, jako je například Visual Studio. Pokud se v launchSettings.jsv souboru nacházejí profily spuštění, použijte --launch-profile {PROFILE NAME} možnost s dotnet run příkazem nebo vyberte profil v Visual Studio. Další informace najdete v tématu věnovaném vytváření balíčků dotnet a balíčku pro distribuci .NET Core.
Podpora HTTP/2
HTTP/2 se podporuje s ASP.NET Core v následujících scénářích nasazení:
- Kestrel
- Operační systém
- Windows Server 2016/Windows 10 nebo novější†
- Linux s OpenSSL 1.0.2 nebo novějším (například Ubuntu 16,04 nebo novější)
- HTTP/2 se v budoucí verzi podporuje v macOS.
- Cílová architektura: .NET Core 2,2 nebo novější
- Operační systém
- HTTP.sys
- Windows Server 2016/Windows 10 nebo novější
- Cílová architektura: neplatí pro nasazení HTTP.sys.
- Služba IIS (v rámci procesu)
- Windows Server 2016/Windows 10 nebo novější; IIS 10 nebo novější
- Cílová architektura: .NET Core 2,2 nebo novější
- Služba IIS (mimo jiné procesy)
- Windows Server 2016/Windows 10 nebo novější; IIS 10 nebo novější
- Veřejná připojení hraničních serverů používají protokol HTTP/2, ale připojení reverzního proxy serveru Kestrel používá protokol HTTP/1.1.
- Cílová architektura: neplatí pro nasazení mimo procesy služby IIS.
†Kestrelmá omezená podpora HTTP/2 v Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS, které jsou k dispozici v těchto operačních systémech, je omezený. Pro zabezpečení připojení TLS může být vyžadován certifikát vygenerovaný pomocí algoritmu ECDSA (s připojením typu eliptická křivka).
- Kestrel
- Operační systém
- Windows Server 2016/Windows 10 nebo novější†
- Linux s OpenSSL 1.0.2 nebo novějším (například Ubuntu 16,04 nebo novější)
- HTTP/2 se v budoucí verzi podporuje v macOS.
- Cílová architektura: .NET Core 2,2 nebo novější
- Operační systém
- HTTP.sys
- Windows Server 2016/Windows 10 nebo novější
- Cílová architektura: neplatí pro nasazení HTTP.sys.
- Služba IIS (v rámci procesu)
- Windows Server 2016/Windows 10 nebo novější; IIS 10 nebo novější
- Cílová architektura: .NET Core 2,2 nebo novější
- Služba IIS (mimo jiné procesy)
- Windows Server 2016/Windows 10 nebo novější; IIS 10 nebo novější
- Veřejná připojení hraničních serverů používají protokol HTTP/2, ale připojení reverzního proxy serveru Kestrel používá protokol HTTP/1.1.
- Cílová architektura: neplatí pro nasazení mimo procesy služby IIS.
†Kestrelmá omezená podpora HTTP/2 v Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS, které jsou k dispozici v těchto operačních systémech, je omezený. Pro zabezpečení připojení TLS může být vyžadován certifikát vygenerovaný pomocí algoritmu ECDSA (s připojením typu eliptická křivka).
- HTTP.sys
- Windows Server 2016/Windows 10 nebo novější
- Cílová architektura: neplatí pro nasazení HTTP.sys.
- Služba IIS (mimo jiné procesy)
- Windows Server 2016/Windows 10 nebo novější; IIS 10 nebo novější
- Veřejná připojení hraničních serverů používají protokol HTTP/2, ale připojení reverzního proxy serveru Kestrel používá protokol HTTP/1.1.
- Cílová architektura: neplatí pro nasazení mimo procesy služby IIS.
Připojení HTTP/2 musí používat vyjednávání protokolu aplikační vrstvy (ALPN) a TLS 1,2 nebo novější. Další informace najdete v tématech, která se týkají scénářů nasazení serveru.
Další materiály
- Kestrelimplementace webového serveru v ASP.NET Core
- Modul ASP.NET Core
- hostování ASP.NET Core v Windows se službou IIS
- Nasazení aplikací ASP.NET Core pro Azure App Service
- Hostování ASP.NET Core v Linuxu se serverem Nginx
- Hostování ASP.NET Core v Linuxu pomocí Apache
- HTTP.sys webového serveru v ASP.NET Core