Leggere in inglese

Condividi tramite


Implementazioni di server Web in ASP.NET Core

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Importante

Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Di Tom Dykstra, Steve Smith, Stephen Halter e Chris Ross

Un'app ASP.NET Core viene eseguita con un'implementazione del server HTTP in-process. L'implementazione del server attende le richieste HTTP e le rende visibili all'app come un set di funzionalità di richiesta combinate in un HttpContext.

ASP.NET Core viene fornito con il server Kestrel, ovvero il server HTTP multipiattaforma predefinito.

Kestrel

Il server Kestrel è l'implementazione di server HTTP multipiattaforma predefinita. Kestrel offre le prestazioni e l'utilizzo della memoria migliori, ma non dispone di alcune delle funzionalità avanzate in HTTP.sys. Per altre informazioni, vedere Confronto tra Kestrel e HTTP.sys in questo documento.

Usare Kestrel:

  • Da solo come server perimetrale che elabora le richieste direttamente da una rete, inclusa Internet.

    Kestrel comunica direttamente con Internet senza un server proxy inverso

  • Con un server proxy inverso, ad esempio Internet Information Services (IIS), Nginx o Apache. Il server proxy inverso riceve le richieste HTTP da Internet e le inoltra a Kestrel.

    Kestrel comunica indirettamente con Internet tramite un server proxy inverso, ad esempio IIS, Nginx o Apache

Sono supportate entrambe le configurazioni di hosting, con o senza un server proxy inverso.

Per Kestrel indicazioni sulla configurazione e informazioni su quando usare Kestrel in una configurazione del proxy inverso, vedere Kestrel Server Web in ASP.NET Core.

ASP.NET Core viene fornito con il server Kestrel, ovvero il server HTTP multipiattaforma predefinito.

Nginx con Kestrel

Per informazioni su come usare Nginx in Linux come server proxy inverso per Kestrel, vedere Host ASP.NET Core in Linux con Nginx.

HTTP.sys

Se si eseguono app ASP.NET Core in Windows, HTTP.sys è un'alternativa a Kestrel. Kestrel è consigliato rispetto a HTTP.sys a meno che l'app non richieda funzionalità non disponibili in Kestrel. Per altre informazioni, vedere l'introduzione all'implementazione del server Web HTTP.sys in ASP.NET Core.

HTTP.sys comunica direttamente con Internet

HTTP.sys può essere usato anche per le app che vengono esposte solo a una rete interna.

HTTP.sys comunica direttamente con la rete interna

Per indicazioni sulla configurazione di HTTP.sys, vedere Implementazione del server Web HTTP.sys in ASP.NET Core.

Infrastruttura del server ASP.NET Core

L'oggetto IApplicationBuilder disponibile nel metodo Startup.Configure espone la proprietà ServerFeatures del tipo IFeatureCollection. Kestrel e HTTP.sys espongono una singola funzionalità ciascuno, IServerAddressesFeature, ma implementazioni server diverse potrebbero esporre funzionalità aggiuntive.

È possibile usare IServerAddressesFeature per individuare la porta a cui è associata l'implementazione server in fase di esecuzione.

Server personalizzati

Se i server predefiniti non soddisfano i requisiti dell'app, è possibile creare un'implementazione server personalizzata. La guida a Open Web Interface for .NET (OWIN) spiega come scrivere un'implementazione Nowin di IServer. È necessario implementare solo le interfacce delle funzionalità usate dall'app, anche se è richiesto come minimo il supporto di IHttpRequestFeature e IHttpResponseFeature.

Avvio del server

Il server viene avviato quando l'editor o l'ambiente di sviluppo integrato (IDE) avvia l'app:

All'avvio dell'app dal prompt dei comandi nella cartella del progetto, dotnet run avvia l'app e il server (solo Kestrel e HTTP.sys). La configurazione viene specificata dall'opzione -c|--configuration, impostata su Debug (valore predefinito) o su Release.

Un file launchSettings.json fornisce la configurazione quando si avvia un'app con dotnet run o con un debugger integrato negli strumenti, ad esempio Visual Studio. Se i profili di avvio sono presenti in un file launchSettings.json, usare l'opzione --launch-profile {PROFILE NAME} con il comando dotnet run o selezionare il profilo in Visual Studio. Per altre informazioni, vedere dotnet run e Creazione di pacchetti di distribuzione di .NET Core.

Supporto HTTP/2

HTTP/2 è supportato con ASP.NET Core negli scenari di distribuzione seguenti:

  • Kestrel
    • Sistema operativo
      • Windows Server 2016/Windows 10 o versioni successive†
      • Linux con OpenSSL 1.0.2 o versioni successive (ad esempio, Ubuntu 16.04 o versioni successive)
      • macOS 10.15 o versione successiva
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • HTTP.sys
    • Windows Server 2016/Windows 10 o versioni successive
    • Framework di destinazione: non applicabile alle distribuzioni HTTP.sys.
  • IIS (in-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • IIS (out-of-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso a Kestrel usa HTTP/1.1.
    • Framework di destinazione: non applicabile alle distribuzioni IIS out-of-process.

†Kestrel ha un supporto limitato per HTTP/2 in Windows Server 2012 R2 e Windows 8.1. Il supporto è limitato perché l'elenco di suite di crittografia TLS supportate disponibili in questi sistemi operativi è limitato. Un certificato generato con un algoritmo ECDSA potrebbe essere necessario per proteggere le connessioni TLS.

  • Kestrel
    • Sistema operativo
      • Windows Server 2016/Windows 10 o versioni successive†
      • Linux con OpenSSL 1.0.2 o versioni successive (ad esempio, Ubuntu 16.04 o versioni successive)
      • HTTP/2 verrà supportato in macOS in una versione futura.
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • HTTP.sys
    • Windows Server 2016/Windows 10 o versioni successive
    • Framework di destinazione: non applicabile alle distribuzioni HTTP.sys.
  • IIS (in-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • IIS (out-of-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso a Kestrel usa HTTP/1.1.
    • Framework di destinazione: non applicabile alle distribuzioni IIS out-of-process.

†Kestrel ha un supporto limitato per HTTP/2 in Windows Server 2012 R2 e Windows 8.1. Il supporto è limitato perché l'elenco di suite di crittografia TLS supportate disponibili in questi sistemi operativi è limitato. Un certificato generato con un algoritmo ECDSA potrebbe essere necessario per proteggere le connessioni TLS.

  • Kestrel
    • Sistema operativo
      • Windows Server 2016/Windows 10 o versioni successive†
      • Linux con OpenSSL 1.0.2 o versioni successive (ad esempio, Ubuntu 16.04 o versioni successive)
      • HTTP/2 verrà supportato in macOS in una versione futura.
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • HTTP.sys
    • Windows Server 2016/Windows 10 o versioni successive
    • Framework di destinazione: non applicabile alle distribuzioni HTTP.sys.
  • IIS (in-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Framework di destinazione: .NET Core 2.2 o versioni successive
  • IIS (out-of-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso a Kestrel usa HTTP/1.1.
    • Framework di destinazione: non applicabile alle distribuzioni IIS out-of-process.

†Kestrel ha un supporto limitato per HTTP/2 in Windows Server 2012 R2 e Windows 8.1. Il supporto è limitato perché l'elenco di suite di crittografia TLS supportate disponibili in questi sistemi operativi è limitato. Un certificato generato con un algoritmo ECDSA potrebbe essere necessario per proteggere le connessioni TLS.

  • HTTP.sys
    • Windows Server 2016/Windows 10 o versioni successive
    • Framework di destinazione: non applicabile alle distribuzioni HTTP.sys.
  • IIS (out-of-process)
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successive
    • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso a Kestrel usa HTTP/1.1.
    • Framework di destinazione: non applicabile alle distribuzioni IIS out-of-process.

Una connessione HTTP/2 deve usare ALPN (Application-Layer Protocol Negotiation) e TLS 1.2 o versioni successive. Per altre informazioni, vedere gli argomenti relativi agli scenari di distribuzione server.

Modelli di app Web aziendali

Per indicazioni sulla creazione di un'app Web affidabile, sicura, efficiente, testabile e scalabile ASP.NET Core, vedere modelli di app Web Enterprise. È disponibile un'app Web di esempio completa di qualità di produzione che implementa i modelli.

Risorse aggiuntive