Implementace webového serveru v ASP.NET Core
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Autoři: Tom Dykstra, Steve Smith, Stephen Halter a Chris Ross
Aplikace ASP.NET Core běží s implementací vnitroprocesového serveru HTTP. Implementace serveru naslouchá požadavkům HTTP a zpřístupní je aplikaci jako sadu funkcí požadavků sestavenou v HttpContext.
ASP.NET Core se dodává s těmito možnostmi:
- Server Kestrel výchozí multiplatformní implementace serveru HTTP. Kestrel poskytuje nejlepší výkon a využití paměti, ale nemá některé z pokročilých funkcí HTTP.sys. Další informace najdete v tématu Kestrel vs. HTTP.sys na kartě Windows.
- Server HTTP služby IIS je vnitroprocesový server pro službu IIS.
- Server HTTP.sys je server HTTP určený výhradně pro Windows, který je založený na ovladači jádra HTTP.sys a rozhraní API serveru HTTP.
Při použití služby IIS nebo IIS Express se aplikace spustí:
- Ve stejném procesu jako pracovní proces služby IIS ( model vnitroprocesového hostování) se serverem HTTP služby IIS. Doporučená konfigurace je vnitroprocesová.
- V procesu odděleném od pracovního procesu služby IIS (model mimoprocesového hostování) se serveremKestrel.
Modul ASP.NET Core je nativní modul služby IIS, který zpracovává nativní požadavky SLUŽBY IIS mezi službou IIS a vnitroprocesovým serverem HTTP služby IIS nebo serverem Kestrel. Další informace najdete v tématu Modul ASP.NET Core (ANCM) pro službu IIS.
Kestrel versus HTTP.sys
Kestrel má oproti HTTP.sys následující výhody:
- Lepší výkon a využití paměti
- Multiplatformní
- Flexibilita (vyvíjí se a opravuje nezávisle na operačním systému)
- Programová konfigurace protokolu TLS a portů
- Rozšiřitelnost, která umožňuje protokoly jako PPv2 a alternativní přenosy
Http.Sys funguje jako součást sdíleného režimu jádra s následujícími funkcemi, které kestrel nemají:
- Sdílení portů
- Ověřování systému Windows v režimu jádra Kestrel podporuje jenom ověřování v uživatelském režimu.
- Rychlé využívá serveru proxy přes přenosy front
- Přímý přenos souborů
- Ukládání odpovědí do mezipaměti
Modely hostingu
K dispozici je několik modelů hostování:
Kestrel self-hosting: Kestrel Webový server běží bez nutnosti jakéhokoli jiného externího webového serveru, jako je služba IIS nebo HTTP.sys.
HTTP.sys self-hosting je alternativou k Kestrel. Kestrel se doporučuje používat raději než HTTP.sys, pokud aplikace nevyžaduje funkce, které nejsou na serveru Kestrel dostupné.
Hostování v procesu služby IIS: Aplikace ASP.NET Core běží ve stejném procesu jako pracovní proces služby IIS. Hostování v procesu služby IIS poskytuje lepší výkon při hostování mimo proces služby IIS, protože požadavky nejsou přesměrované přes adaptér zpětné smyčky, síťové rozhraní, které vrací odchozí síťový provoz zpět na stejný počítač. Služba IIS zajišťuje správu procesů s využitím Aktivační služby procesů systému Windows (WAS).
Hostování mimo proces služby IIS: aplikace ASP.NET Core běží v procesu odděleně od pracovního procesu služby IIS a modul zpracovává správu procesů. Modul zahájí tento proces pro aplikaci ASP.NET Core při přijetí prvního požadavku a v případě vypnutí nebo selhání aplikaci restartuje. Jedná se v podstatě o stejné chování jako u aplikací, které běží vnitroprocesově a jsou spravované Aktivační službou procesů systému Windows (WAS). Použití samostatného procesu také umožňuje hostování více aplikací ze stejného fondu aplikací.
Další informace najdete v následujících článcích:
Kestrel
Server Kestrel výchozí multiplatformní implementace serveru HTTP. Kestrel poskytuje nejlepší výkon a využití paměti, ale nemá některé z pokročilých funkcí HTTP.sys. Další informace najdete v tomto dokumentu v části Kestrel versus HTTP.sys.
Kestrel použijte:
Samostatně jako hraniční server zpracovávající požadavky přímo ze sítě, včetně internetu.
S reverzním proxy serverem, jako je Internetová informační služba (IIS),Nginx nebo Apache. Reverzní proxy server přijímá požadavky HTTP z internetu a předává je do serveru Kestrel.
Podporuje se jakákoli konfigurace hostování – s reverzním proxy serverem i bez něj.
Pokyny Kestrel ke konfiguraci konfigurace a informace o tom, kdy se má použít Kestrel v konfiguraci reverzního proxy serveru, najdete Kestrel na webovém serveru v ASP.NET Core.
ASP.NET Core se dodává s těmito možnostmi:
- Server Kestrel výchozí multiplatformní server HTTP.
- Server HTTP.sys je server HTTP určený výhradně pro Windows, který je založený na ovladači jádra HTTP.sys a rozhraní API serveru HTTP.
Při použití služby IIS nebo IIS Express se serverem Kestrel aplikace běží v procesu odděleném od pracovního procesu služby IIS (mimoprocesově).
Vzhledem k tomu, že aplikace ASP.NET Core běží v procesu odděleném od pracovního procesu služby IIS, zajišťuje správu procesů modul. Modul zahájí tento proces pro aplikaci ASP.NET Core při přijetí prvního požadavku a v případě vypnutí nebo selhání aplikaci restartuje. Jedná se v podstatě o stejné chování jako u aplikací, které běží vnitroprocesově a jsou spravované Aktivační službou procesů systému Windows (WAS).
Následující diagram znázorňuje vztah mezi službou IIS, modulem ASP.NET Core a mimoprocesově hostovanou aplikací:
Požadavky přijdou z webu do ovladače HTTP.sys v režimu jádra. Ovladač přesměruje požadavek do služby IIS na nakonfigurovaném portu webu, obvykle 80 (HTTP) nebo 443 (HTTPS). Modul předá požadavky na server Kestrel na náhodném portu dané aplikace mimo porty 80 a 443.
Modul tento port určí při spuštění prostřednictvím proměnné prostředí a middleware IIS Integration nakonfiguruje server tak, aby naslouchal na adrese http://localhost:{port}
. Provedou se další kontroly a požadavky, které nepocházejí z tohoto modulu, se zamítnou. Modul nepodporuje předávání HTTPS, takže se požadavky předávají přes HTTP, i když je služba IIS přijme přes HTTPS.
Jakmile server Kestrel přijme požadavek z modulu, požadavek se odešle do kanálu middlewaru ASP.NET Core. Kanál middlewaru požadavek zpracuje a předá ho jako instanci HttpContext
do logiky aplikace. Middleware přidaný integrací služby IIS aktualizuje schéma, vzdálenou IP adresu a základ cesty k účtu pro přesměrování požadavku na server Kestrel. Odpověď aplikace se předá zpět do služby IIS, která ji odešle klientovi HTTP, který požadavek inicioval.
Pokyny ke konfiguraci modulu služby IIS a ASP.NET Core najdete v následujících tématech:
Nginx a Kestrel
Informace o tom, jak používat Nginx v Linuxu jako reverzní proxy server pro Kestrel najdete v tématu Hostování ASP.NET Core v Linuxu s Nginx.
HTTP.sys
Pokud aplikace ASP.NET Core běží ve Windows, je HTTP.sys alternativou k serveru Kestrel. Kestrel se doporučuje používat raději než HTTP.sys, pokud aplikace nevyžaduje funkce, které nejsou na serveru Kestrel dostupné. Další informace najdete v tématu Implementace webového serveru HTTP.sys v ASP.NET Core.
HTTP.sys lze použít také pro aplikace, které jsou vystavené jenom v interní síti.
Doprovodné materiály ke konfiguraci HTTP.sys najdete v tématu Implementace webového serveru HTTP.sys v ASP.NET Core.
Infrastruktura serveru ASP.NET Core
Rozhraní IApplicationBuilder dostupné v metodě Startup.Configure
vystavuje vlastnost ServerFeatures typu IFeatureCollection. Kestrel a HTTP.sys vystavují jenom jednu funkci, IServerAddressesFeature, ale různé implementace serverů mohou vystavit další funkce.
Pomocí IServerAddressesFeature
Vlastní servery
Pokud integrované servery nesplňují požadavky aplikace, je možné vytvořit vlastní implementaci serveru. Průvodce OWIN (Open Web Interface for .NET) ukazuje, jak napsat implementaci založenou na NowinIServer. Implementaci vyžadují jenom rozhraní funkcí, které aplikace využívá, ale se musí podporovat minimálně IHttpRequestFeature a IHttpResponseFeature.
Spuštění serveru
Server se spustí při spuštění aplikace v integrovaném vývojovém prostředí (IDE) nebo editoru:
- Visual Studio: Profily spouštění je možné použít ke spuštění aplikace a serveru pomocí IIS Express / modulu ASP.NET Core nebo konzoly.
- Visual Studio Code: Aplikaci a server spustí Omnisharp, který aktivuje ladicí program CoreCLR.
- Visual Studio for Mac: Aplikaci a server spouští ladicí program Mono Soft-Mode Debugger.
Při spuštění aplikace z příkazového řádku ve složce projektu aplikaci a server spustí dotnet (jenom Kestrel a HTTP.sys). Konfigurace je určená možností -c|--configuration
, která je nastavena na Debug
(výchozí) nebo Release
.
Soubor launchSettings.json
poskytuje konfiguraci při spouštění aplikace s využitím dotnet run
nebo ladicího programu integrovaného do nástrojů, jako je Visual Studio. Pokud jsou v souboru launchSettings.json
k dispozici profily spouštění, použijte možnost --launch-profile {PROFILE NAME}
s příkazem dotnet run
nebo vyberte požadovaný profil v sadě Visual Studio. Další informace najdete v tématech dotnet run a Vytváření distribučních balíčků .NET Core.
Podpora HTTP/2
ASP.NET Core podporuje HTTP/2 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ší (například Ubuntu 16.04 nebo novější)
- macOS 10.15 nebo novější
- 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: Nevztahuje se na nasazení HTTP.sys.
- IIS (v procesu)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Cílová architektura: .NET Core 2.2 nebo novější
- IIS (mimo proces)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
- Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.
†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).
- Kestrel
- Operační systém
- Windows Server 2016 / Windows 10 nebo novější†
- Linux s OpenSSL 1.0.2 nebo novější (například Ubuntu 16.04 nebo novější)
- Protokol HTTP/2 bude v systému macOS podporován v některé z budoucích verzí.
- 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: Nevztahuje se na nasazení HTTP.sys.
- IIS (v procesu)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Cílová architektura: .NET Core 2.2 nebo novější
- IIS (mimo proces)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
- Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.
†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).
- Kestrel
- Operační systém
- Windows Server 2016 / Windows 10 nebo novější†
- Linux s OpenSSL 1.0.2 nebo novější (například Ubuntu 16.04 nebo novější)
- Protokol HTTP/2 bude v systému macOS podporován v některé z budoucích verzí.
- 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: Nevztahuje se na nasazení HTTP.sys.
- IIS (v procesu)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Cílová architektura: .NET Core 2.2 nebo novější
- IIS (mimo proces)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
- Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.
†Kestrel má omezenou podporu protokolu HTTP/2 v systémech Windows Server 2012 R2 a Windows 8.1. Podpora je omezená, protože seznam podporovaných šifrovacích sad TLS dostupných v těchto operačních systémech je omezený. K zabezpečení připojení TLS může být potřeba certifikát vygenerovaný pomocí algoritmu ECDSA (Elliptic Curve Digital Signature Algorithm).
- HTTP.sys
- Windows Server 2016 / Windows 10 nebo novější
- Cílová architektura: Nevztahuje se na nasazení HTTP.sys.
- IIS (mimo proces)
- Windows Server 2016 nebo Windows 10 nebo novější, služba IIS 10 nebo novější
- Připojení k veřejnému hraničnímu serveru používají HTTP/2, ale připojení proxy serveru k serveru Kestrel používá HTTP/1.1.
- Cílová architektura: Nevztahuje se na mimoprocesová nasazení služby IIS.
Připojení HTTP/2 musí používat ALPN (Application-Layer Protocol Negotiation) a TLS 1.2 nebo novější. Další informace naleznete v tématech, která se týkají scénářů nasazení serveru.