Webbserverimplementeringar i ASP.NET Core
Note
Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. Den aktuella versionen av den här artikeln finns i .NET 9-versionen .
Viktig
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
Den aktuella utgåvan finns i .NET 9-versionen av artikeln.
Av Tom Dykstra, Steve Smith, Stephen Halteroch Chris Ross
En ASP.NET Core-app körs med en pågående HTTP-serverimplementering. Serverimplementeringen lyssnar efter HTTP-begäranden och visar dem i appen som en uppsättning begärandefunktioner sammansatta i en HttpContext.
ASP.NET Core levereras med följande:
- Kestrel server är standardimplementeringen av HTTP-servern mellan plattformar. Kestrel ger bästa prestanda och minnesanvändning, men den har inte några av de avancerade funktionerna i HTTP.sys. Mer information finns i Kestrel jämfört med HTTP.sys på fliken Windows.
- IIS HTTP Server är en för IIS.
- HTTP.sys server är en HTTP-server med endast Windows baserat på HTTP.sys-kerneldrivrutinen och HTTP Server API-.
När du använder IIS eller IIS Expresskörs appen antingen:
- I samma process som IIS-arbetsprocessen (in-process värdmodell) med IIS HTTP-servern. In-process är den rekommenderade konfigurationen.
- I en process som är separat från IIS-arbetsprocessen (out-of-process värdmodell) med Kestrel server.
ASP.NET Core-modulen är en intern IIS-modul som hanterar interna IIS-begäranden mellan IIS och den pågående IIS HTTP-servern eller Kestrel. Mer information finns i ASP.NET Core Module (ANCM) för IIS.
Kestrel jämfört med HTTP.sys
Kestrel har följande fördelar jämfört med HTTP.sys:
- Bättre prestanda och minnesanvändning.
- Plattformsoberoende
- Agility, den är utvecklad och korrigerad oberoende av operativsystemet.
- Programmatisk port och TLS-konfiguration
- Utökningsbarhet som möjliggör protokoll som PPv2- och alternativa transporter.
Http.Sys fungerar som en komponent i delat kernelläge med följande funktioner som kestrel inte har:
- Portdelning
- Windows-autentisering i kernelläge. Kestrel stöder endast autentisering i användarläge.
- Snabb proxyhantering via kötöverföringar
- Direkt filöverföring
- Cachelagring av svar
Värdmodeller
Det finns flera värdmodeller:
Kestrel självhostad: Kestrel-webbservern körs utan att kräva någon annan extern webbserver, till exempel IIS eller HTTP.sys.
HTTP.sys självhosting är ett alternativ till Kestrel. Kestrel rekommenderas via HTTP.sys såvida inte appen kräver funktioner som inte är tillgängliga i Kestrel.
IIS-värdtjänster: En ASP.NET Core-app körs i samma process som IIS-arbetsprocessen. IIS in-process hosting ger bättre prestanda jämfört med IIS out-of-process hosting eftersom begäranden inte dirigeras över loopbackgränssnittet, ett nätverksgränssnitt som returnerar utgående trafik tillbaka till samma dator. IIS hanterar processhantering med Windows Process Activation Service (WAS).
IIS out-of-process hosting: ASP.NET Core-appar körs i en process som är separat från IIS-arbetsprocessen och modulen hanterar processhantering. Modulen startar processen för ASP.NET Core-appen när den första begäran kommer och startar om appen om den stängs av eller kraschar. Det här är i stort sett samma beteende som för appar som körs i processen som hanteras av Windows Process Activation Service (WAS). Genom att använda en separat process kan du också vara värd för fler än en app från samma apppool.
Mer information finns i följande:
Kestrel
Kestrel server är standardimplementeringen av HTTP-servern mellan plattformar. Kestrel ger bästa prestanda och minnesanvändning, men den har inte några av de avancerade funktionerna i HTTP.sys. Mer information finns i Kestrel och HTTP.sys i det här dokumentet.
Använd Kestrel:
Av sig själv som en gränsserver som bearbetar begäranden direkt från ett nätverk, inklusive Internet.
Med en omvänd proxyserver, till exempel Internet Information Services (IIS), Nginxeller Apache. En omvänd proxyserver tar emot HTTP-begäranden från Internet och vidarebefordrar dem till Kestrel.
Antingen värdkonfiguration med eller utan omvänd proxyserver stöds.
Kestrel konfigurationsvägledning och information om när du ska använda Kestrel i en omvänd proxykonfiguration finns i Kestrel webbserver i ASP.NET Core.
ASP.NET Core levereras med följande:
- Kestrel server är standard- och plattformsoberoende HTTP-server.
- HTTP.sys server är en HTTP-server med endast Windows baserat på HTTP.sys-kerneldrivrutinen och HTTP Server API-.
När du använder IIS eller IIS Expresskörs appen i en process som är separat från IIS-arbetsprocessen () med Kestrel-servern.
Eftersom ASP.NET Core-appar körs i en process som är separat från IIS-arbetsprocessen hanterar modulen processhantering. Modulen startar processen för ASP.NET Core-appen när den första begäran kommer och startar om appen om den stängs av eller kraschar. Det här är i stort sett samma beteende som för appar som körs i processen som hanteras av Windows Process Activation Service (WAS).
Följande diagram illustrerar relationen mellan IIS, ASP.NET Core-modulen och en app som hanteras utan process:
Förfrågningar skickas från webben till kärnlägesdrivrutinen HTTP.sys. Drivrutinen dirigerar begäranden till IIS på webbplatsens konfigurerade port, vanligtvis 80 (HTTP) eller 443 (HTTPS). Modulen vidarebefordrar begäranden till Kestrel på en slumpmässig port för appen, som inte är port 80 eller 443.
Modulen anger porten via en miljövariabel vid start och IIS Integration Middleware konfigurerar servern att lyssna på http://localhost:{port}
. Ytterligare kontroller utförs och begäranden som inte kommer från modulen avvisas. Modulen stöder inte HTTPS-vidarebefordring, så begäranden vidarebefordras via HTTP även om de tas emot av IIS via HTTPS.
När Kestrel har hämtat begäran från modulen skickas den vidare till ASP.NET Core-mellanprogramspipelinen. Pipelinen för mellanprogram hanterar begäran och skickar den som en HttpContext
instans till appens logik. Mellanprogram som läggs till av IIS-integrering uppdaterar schemat, fjärr-IP och pathbase för att ta hänsyn till vidarebefordran av begäran till Kestrel. Appens svar skickas tillbaka till IIS, vilket skickar tillbaka det till HTTP-klienten som initierade begäran.
Konfigurationsvägledning för IIS och ASP.NET Core Module finns i följande avsnitt:
Nginx med Kestrel
Information om hur du använder Nginx på Linux som omvänd proxyserver för Kestrelfinns i Host ASP.NET Core on Linux with Nginx.
HTTP.sys
Om ASP.NET Core-appar körs i Windows är HTTP.sys ett alternativ till Kestrel. Kestrel rekommenderas via HTTP.sys såvida inte appen kräver funktioner som inte är tillgängliga i Kestrel. Mer information finns i HTTP.sys webbserverimplementering i ASP.NET Core.
HTTP.sys kan också användas för appar som endast exponeras för ett internt nätverk.
Mer HTTP.sys konfigurationsvägledning finns i HTTP.sys webbserverimplementering i ASP.NET Core.
ASP.NET Core-serverinfrastruktur
Den IApplicationBuilder som är tillgänglig i metoden Startup.Configure
visar egenskapen ServerFeatures av typen IFeatureCollection.
Kestrel och HTTP.sys exponerar endast en enskild funktionalitet var, IServerAddressesFeature, men olika serverimplementeringar kan exponera ytterligare funktionalitet.
IServerAddressesFeature
kan användas för att ta reda på vilken port serverimplementeringen har bundits till under körning.
Anpassade servrar
Om de inbyggda servrarna inte uppfyller appens krav kan en anpassad serverimplementering skapas. Guiden Open Web Interface for .NET (OWIN) visar hur du skriver en Nowin-baserad IServer implementering. Endast de funktionsgränssnitt som appen använder kräver implementering, men minst IHttpRequestFeature och IHttpResponseFeature måste stödjas.
Serveruppstart
Servern startas när IDE (Integrated Development Environment) eller redigeraren startar appen:
- Visual Studio: Startprofiler kan användas för att starta appen och servern med antingen IIS Express/ASP.NET Core Module eller konsolen.
- Visual Studio Code: Appen och servern startas av Omnisharp, som aktiverar CoreCLR-felsökningsprogrammet.
- Visual Studio för Mac: Appen och servern startas av Mono Soft-Mode Debugger.
När du startar appen från en kommandorad i projektets mapp, startar dotnet run appen och servern (Kestrel endast HTTP.sys). Konfigurationen anges av alternativet -c|--configuration
, som är inställt på antingen Debug
(standard) eller Release
.
En launchSettings.json
-fil ger konfiguration när du startar en app med dotnet run
eller med ett felsökningsprogram som är inbyggt i verktyg, till exempel Visual Studio. Om startprofiler finns i en launchSettings.json
fil använder du alternativet --launch-profile {PROFILE NAME}
med kommandot dotnet run
eller väljer profilen i Visual Studio. Mer information finns i dotnet run och .NET Core distributionspaketering.
HTTP/2-stöd
HTTP/2- stöds med ASP.NET Core i följande distributionsscenarier:
- Kestrel
- Operativsystem
- Windows Server 2016/Windows 10 eller senare†
- Linux med OpenSSL 1.0.2 eller senare (till exempel Ubuntu 16.04 eller senare)
- macOS 10.15 eller senare
- Målramverk: .NET Core 2.2 eller senare
- Operativsystem
-
HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
-
IIS (pågår)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Målramverk: .NET Core 2.2 eller senare
-
IIS (utanför process)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Offentliga gränsserveranslutningar använder HTTP/2, men den omvända proxyanslutningen till Kestrel använder HTTP/1.1.
- Målramverk: Gäller inte för out-of-process-distributioner i IIS.
†Kestrel har begränsat stöd för HTTP/2 på Windows Server 2012 R2 och Windows 8.1. Stödet är begränsat eftersom listan över TLS-chiffersviter som stöds är begränsad på dessa operativsystem. Ett certifikat som genereras med hjälp av en Elliptic Curve Digital Signature Algorithm (ECDSA) kan krävas för att skydda TLS-anslutningar.
- Kestrel
- Operativsystem
- Windows Server 2016/Windows 10 eller senare†
- Linux med OpenSSL 1.0.2 eller senare (till exempel Ubuntu 16.04 eller senare)
- HTTP/2 kommer att stödjas på macOS i en framtida version.
- Målramverk: .NET Core 2.2 eller senare
- Operativsystem
-
HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
-
IIS (pågår)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Målramverk: .NET Core 2.2 eller senare
-
IIS (out-of-process)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Offentliga gränsserveranslutningar använder HTTP/2, men den omvända proxyanslutningen till Kestrel använder HTTP/1.1.
- Målramverk: Gäller inte för out-of-process-distributioner i IIS.
†Kestrel har begränsat stöd för HTTP/2 på Windows Server 2012 R2 och Windows 8.1. Stödet är begränsat eftersom listan över TLS-chiffersviter som stöds är begränsad på dessa operativsystem. Ett certifikat som genereras med hjälp av en Elliptic Curve Digital Signature Algorithm (ECDSA) kan krävas för att skydda TLS-anslutningar.
- Kestrel
- Operativsystem
- Windows Server 2016/Windows 10 eller senare†
- Linux med OpenSSL 1.0.2 eller senare (till exempel Ubuntu 16.04 eller senare)
- HTTP/2 kommer att stödjas på macOS i en framtida version.
- Målramverk: .NET Core 2.2 eller senare
- Operativsystem
-
HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
-
IIS (pågår)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Målramverk: .NET Core 2.2 eller senare
-
IIS (utanför-processen)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Offentliga gränsserveranslutningar använder HTTP/2, men den omvända proxyanslutningen till Kestrel använder HTTP/1.1.
- Målramverk: Gäller inte för out-of-process-distributioner i IIS.
†Kestrel har begränsat stöd för HTTP/2 på Windows Server 2012 R2 och Windows 8.1. Stödet är begränsat eftersom listan över TLS-chiffersviter som stöds är begränsad på dessa operativsystem. Ett certifikat som genereras med hjälp av en Elliptic Curve Digital Signature Algorithm (ECDSA) kan krävas för att skydda TLS-anslutningar.
-
HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
-
IIS (utanför processen)
- Windows Server 2016/Windows 10 eller senare; IIS 10 eller senare
- Offentliga gränsserveranslutningar använder HTTP/2, men den omvända proxyanslutningen till Kestrel använder HTTP/1.1.
- Målramverk: Gäller inte för out-of-process-distributioner i IIS.
En HTTP/2-anslutning måste använda Application-Layer Protocol Negotiation (ALPN) och TLS 1.2 eller senare. Mer information finns i avsnitten som gäller dina scenarier för serverdistribution.
Mönster för företagswebbappar
Vägledning om hur du skapar en tillförlitlig, säker, högpresterande, testbar och skalbar ASP.NET Core-app finns i Enterprise-webbappmönster. En komplett exempelwebbapp av produktionskvalitet som implementerar mönstren är tillgänglig.
Ytterligare resurser
ASP.NET Core