Dela via


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:

När du använder IIS eller IIS Expresskörs appen antingen:

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:

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.

    Kestrel kommunicerar direkt med Internet utan en omvänd proxyserver

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

    Kestrel kommunicerar indirekt med Internet via en omvänd proxyserver, till exempel IIS, Nginx eller Apache

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:

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:

ASP.NET Core Module

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 kommunicerar direkt med Internet

HTTP.sys kan också användas för appar som endast exponeras för ett internt nätverk.

HTTP.sys kommunicerar direkt med det interna nätverket

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:

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