Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Important
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.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Av Tom Dykstra, Steve Smith, Stephen Halter och 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 som består av en HttpContext.
ASP.NET Core levereras med följande:
- Kestrel servern ä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. För mer information, se Kestrel versus HTTP.sys på fliken Windows.
- IIS HTTP Server är en för IIS.
- HTTP.sys-servern är en HTTP-server med endast Windows baserat på HTTP.sys-kerneldrivrutinen och HTTP Server-API:et.
När du använder IIS eller IIS Express körs appen antingen:
- I samma process som IIS-arbetsprocessen (den pågående värdmodellen) med IIS HTTP-servern. In-process är den rekommenderade konfigurationen.
- I en process som är skild från IIS-arbetsprocessen (värdmodell utanför processen) med Kestrel servern.
ASP.NET Core-modulen är en intern IIS-modul som hanterar interna IIS-begäranden mellan IIS och den processbaserade 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.
- Cross platform
- 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:
- Port sharing
- 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
- Response caching
Hosting models
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 servern ä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. För mer information, se Kestrel vs. 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),Nginx eller 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.
Konfigurationsvägledning Kestrel och information om när du ska använda Kestrel i en omvänd proxykonfiguration Kestrel finns i webbservern i ASP.NET Core.
ASP.NET Core levereras med följande:
- Kestrel servern är standard, plattformsoberoende HTTP-server.
- HTTP.sys-servern är en HTTP-server med endast Windows baserat på HTTP.sys-kerneldrivrutinen och HTTP Server-API:et.
När du använder IIS eller IIS Express körs appen i en process som är separat från IIS-arbetsprocessen (out-of-process) 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 (Värd ASP.NET Core i Linux med 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 iHTTP.sys webbserverimplementering i ASP.NET Core.
               
              
            
HTTP.sys kan också användas för appar som endast exponeras för ett internt nätverk.
               
              
            
För vägledning om HTTP.sys-konfiguration, se 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.
Custom servers
Om de inbyggda servrarna inte uppfyller appens krav kan en anpassad serverimplementering skapas. Guiden Öppna webbgränssnitt för .NET (OWIN) visar hur du skriver en Nowin-baseradIServer implementering. Endast de funktionsgränssnitt som appen använder kräver implementering, men minst IHttpRequestFeature och IHttpResponseFeature måste stödjas.
Server startup
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.
När du startar appen från en kommandotolk i projektets mapp, startar dotnet run appen och servern (Kestrel och HTTP.sys endast). 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-körning och .NET-distributionspaketering.
HTTP/2 support
HTTP/2 stöds med ASP.NET Core i följande distributionsscenarier:
- Kestrel
- Operating system - 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
 
- Operating system 
- 
              HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
 
- 
              IIS (in-process)
- 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
- Operating system - 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
 
- Operating system 
- 
              HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
 
- 
              IIS (in-process)
- 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
- Operating system - 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
 
- Operating system 
- 
              HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
 
- 
              IIS (in-process)
- 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.
- 
              HTTP.sys
- Windows Server 2016/Windows 10 eller senare
- Målramverk: Gäller inte för HTTP.sys distributioner.
 
- 
              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.
 
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 Mönster för företagswebbappar. En komplett exempelwebbapp av produktionskvalitet som implementerar mönstren är tillgänglig.
Additional resources
ASP.NET Core