Sdílet prostřednictvím


Implementace webového serveru v ASP.NET Core

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

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 v tomto článku ve verzi .NET 9.

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 zobrazí je do aplikace jako sadu funkcí požadavků , které se skládají do HttpContext.

ASP.NET Core se dodává s těmito možnostmi:

Při použití služby IIS nebo IIS Express se aplikace spustí:

  • Ve stejném procesu jako pracovní proces služby IIS ( model hostování v procesu) se serverem HTTP služby IIS. Konfigurace v procesu je doporučenou volbou.
  • V procesu odděleném od pracovního procesu služby IIS (model hostování mimo pracovní proces) se serverem .

Modul ASP.NET Core je nativní modul služby IIS, který zpracovává nativní requesty služby IIS mezi službou IIS a in-process serverem HTTP služby IIS nebo Kestrel. Další informace najdete v tématu ASP.NET Základní modul (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 jsou PPv2 a alternativní transporty.

Http.Sys funguje jako součást sdíleného režimu jádra s následujícími funkcemi, které kestrel nemají:

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 zpracovává správu procesů pomocí služby aktivace procesu systému Windows (WAS).</a0>

  • 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é spouštějí proces, které spravuje služba aktivace procesu 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

Kestrel server je výchozí implementace multiplatformních serverů 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 v tomto dokumentu.

Kestrel použijte:

  • Samostatně jako hraniční server zpracovávající požadavky přímo ze sítě, včetně internetu.

    Kestrel komunikuje přímo s internetem bez reverzního proxy serveru.

  • 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.

    Kestrel komunikuje nepřímo s internetem prostřednictvím reverzního proxy serveru, jako je služba IIS, Nginx nebo Apache.

Podporuje se jakákoli konfigurace hostování – s reverzním proxy serverem i bez něj.

Pokyny ke konfiguraci Kestrel a informace o tom, kdy použít Kestrel v konfiguraci reverzního proxy serveru, najdete na webovém serveru Kestrel pro ASP.NET Core.

ASP.NET Core se dodává s těmito možnostmi:

Při použití služby IIS nebo IIS Express se aplikace spouští v procesu odděleném od pracovního procesu iis (mimo proces) se serveremKestrel.

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é spouštějí proces, které spravuje služba aktivace procesu Systému Windows (WAS).

Následující diagram znázorňuje vztah mezi službou IIS, modulem ASP.NET Core a mimoprocesově hostovanou aplikací:

základní modul ASP.NET

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 specifikuje port prostřednictvím proměnné prostředí při spuštění a IIS Integration Middleware nakonfiguruje server tak, aby naslouchal na 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 Kestrel, najdete v tématu Hostitel 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 HTTP.sys implementace webového serveru v ASP.NET Core.

HTTP.sys komunikuje přímo s internetem

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

HTTP.sys komunikuje přímo s interní sítí

Pokyny ke konfiguraci HTTP.sys najdete v tématuHTTP.sys implementace webového serveru 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. Příručka Open Web Interface for .NET (OWIN) ukazuje, jak napsat implementaci založenou na IServer. 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:

Při spuštění aplikace pomocí příkazového řádku ve složce projektu příkaz dotnet run spustí aplikaci a server (pouze 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 naleznete na dotnet run a balení distribuce .NET Core.

Podpora HTTP/2

Protokol 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ší (například Ubuntu 16.04 nebo novější)
      • macOS 10.15 nebo novější
    • Cílová architektura: .NET Core 2.2 nebo novější
  • 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ší
  • 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ší
  • 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 Application-Layer Protokolové vyjednávání (ALPN) a TLS 1.2 nebo novější. Další informace naleznete v tématech, která se týkají scénářů nasazení serveru.

Vzory podnikových webových aplikací

Pokyny k vytvoření spolehlivé, zabezpečené, výkonné, testovatelné a škálovatelné aplikace ASP.NET Core najdete v tématu Vzory podnikových webových aplikací. K dispozici je kompletní ukázková webová aplikace pro produkční kvalitu, která implementuje vzory.

Další materiály