Utiliser HTTP/2 avec le serveur web ASP.NET Core Kestrel

HTTP/2 est disponible pour les applications ASP.NET Core si les conditions de base suivantes sont remplies :

  • Système d'exploitation
    • Windows Server 2016/Windows 10 ou version ultérieure‡
    • Linux avec OpenSSL 1.0.2 ou version ultérieure (par exemple, Ubuntu 16.04 ou version ultérieure)
    • macOS 10.15 ou ultérieur
  • Version cible de .Net Framework : .NET Core 2.2 ou version ultérieure
  • Connexion ALPN (Application-Layer Protocol Negotiation)
  • TLS 1.2 ou connexion ultérieure

‡Kestrel propose une prise en charge limitée de HTTP/2 sur Windows Server 2012 R2 et Windows 8.1. La prise en charge est limitée car la liste des suites de chiffrement TLS prises en charge sur ces systèmes d’exploitation est limitée. Un certificat généré à l’aide d’Elliptic Curve Digital Signature algorithme (ECDSA) peut être requis pour sécuriser les connexions TLS.

Si une connexion HTTP/2 est établie, HttpRequest.Protocol retourne HTTP/2.

À partir de .NET Core 3.0, HTTP/2 est activé par défaut. Pour plus d’informations sur la configuration, consultez les sections Limites HTTP/2 Kestrel et ListenOptions.Protocols.

Fonctionnalités HTTP/2 avancées

Fonctionnalités HTTP/2 supplémentaires dans la prise en charge de gRPC, notamment la prise en charge Kestrel des codes de fin de réponse et l’envoi de trames de réinitialisation.

Bandes-annonce

Les codes de fin HTTP sont similaires aux en-têtes HTTP, sauf qu’ils sont envoyés après l’envoi du corps de la réponse. Pour IIS et HTTP.sys, seuls les codes de fin de réponse HTTP/2 sont pris en charge.

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

Dans l’exemple de code précédent :

  • SupportsTrailers garantit que les codes de fin sont pris en charge pour la réponse.
  • DeclareTrailer ajoute le nom de code de fin donné à l’en-tête de réponse Trailer. La déclaration des codes de fin d’une réponse est facultative, mais recommandée. Si DeclareTrailer est appelé, il doit être avant l’envoi des en-têtes de réponse.
  • AppendTrailer ajoute le code de fin.

Réinitialiser

La réinitialisation permet au serveur de réinitialiser une requête HTTP/2 avec un code d’erreur spécifié. Une requête de réinitialisation est considérée comme abandonnée.

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset dans l’exemple de code précédent spécifie le code d’erreur INTERNAL_ERROR. Pour plus d’informations sur les codes d’erreur HTTP/2, consultez la section du code d’erreur de spécification HTTP/2.

HTTP/2 est disponible pour les applications ASP.NET Core si les conditions de base suivantes sont remplies :

  • Système d'exploitation†
    • Windows Server 2016/Windows 10 ou version ultérieure‡
    • Linux avec OpenSSL 1.0.2 ou version ultérieure (par exemple, Ubuntu 16.04 ou version ultérieure)
  • Version cible de .Net Framework : .NET Core 2.2 ou version ultérieure
  • Connexion ALPN (Application-Layer Protocol Negotiation)
  • TLS 1.2 ou connexion ultérieure

†HTTP/2 sera pris en charge sur macOS dans une prochaine version. ‡Kestrel propose une prise en charge limitée de HTTP/2 sur Windows Server 2012 R2 et Windows 8.1. La prise en charge est limitée car la liste des suites de chiffrement TLS prises en charge sur ces systèmes d’exploitation est limitée. Un certificat généré à l’aide d’Elliptic Curve Digital Signature algorithme (ECDSA) peut être requis pour sécuriser les connexions TLS.

Si une connexion HTTP/2 est établie, HttpRequest.Protocol retourne HTTP/2.

À partir de .NET Core 3.0, HTTP/2 est activé par défaut. Pour plus d’informations sur la configuration, consultez les sections Limites HTTP/2 Kestrel et ListenOptions.Protocols.

Fonctionnalités HTTP/2 avancées

Fonctionnalités HTTP/2 supplémentaires dans la prise en charge de gRPC, notamment la prise en charge Kestrel des codes de fin de réponse et l’envoi de trames de réinitialisation.

Bandes-annonce

Les codes de fin HTTP sont similaires aux en-têtes HTTP, sauf qu’ils sont envoyés après l’envoi du corps de la réponse. Pour IIS et HTTP.sys, seuls les codes de fin de réponse HTTP/2 sont pris en charge.

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

Dans l’exemple de code précédent :

  • SupportsTrailers garantit que les codes de fin sont pris en charge pour la réponse.
  • DeclareTrailer ajoute le nom de code de fin donné à l’en-tête de réponse Trailer. La déclaration des codes de fin d’une réponse est facultative, mais recommandée. Si DeclareTrailer est appelé, il doit être avant l’envoi des en-têtes de réponse.
  • AppendTrailer ajoute le code de fin.

Réinitialiser

La réinitialisation permet au serveur de réinitialiser une requête HTTP/2 avec un code d’erreur spécifié. Une requête de réinitialisation est considérée comme abandonnée.

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset dans l’exemple de code précédent spécifie le code d’erreur INTERNAL_ERROR. Pour plus d’informations sur les codes d’erreur HTTP/2, consultez la section du code d’erreur de spécification HTTP/2.

HTTP/2 est disponible pour les applications ASP.NET Core si les conditions de base suivantes sont remplies :

  • Système d'exploitation†
    • Windows Server 2016/Windows 10 ou version ultérieure‡
    • Linux avec OpenSSL 1.0.2 ou version ultérieure (par exemple, Ubuntu 16.04 ou version ultérieure)
  • Version cible de .Net Framework : .NET Core 2.2 ou version ultérieure
  • Connexion ALPN (Application-Layer Protocol Negotiation)
  • TLS 1.2 ou connexion ultérieure

†HTTP/2 sera pris en charge sur macOS dans une prochaine version. ‡Kestrel propose une prise en charge limitée de HTTP/2 sur Windows Server 2012 R2 et Windows 8.1. La prise en charge est limitée car la liste des suites de chiffrement TLS prises en charge sur ces systèmes d’exploitation est limitée. Un certificat généré à l’aide d’Elliptic Curve Digital Signature algorithme (ECDSA) peut être requis pour sécuriser les connexions TLS.

Si une connexion HTTP/2 est établie, HttpRequest.Protocol retourne HTTP/2.

À partir de .NET Core 3.0, HTTP/2 est activé par défaut. Pour plus d’informations sur la configuration, consultez les sections Limites HTTP/2 Kestrel et ListenOptions.Protocols.

Fonctionnalités HTTP/2 avancées

Fonctionnalités HTTP/2 supplémentaires dans la prise en charge de gRPC, notamment la prise en charge Kestrel des codes de fin de réponse et l’envoi de trames de réinitialisation.

Bandes-annonce

Les codes de fin HTTP sont similaires aux en-têtes HTTP, sauf qu’ils sont envoyés après l’envoi du corps de la réponse. Pour IIS et HTTP.sys, seuls les codes de fin de réponse HTTP/2 sont pris en charge.

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

Dans l’exemple de code précédent :

  • SupportsTrailers garantit que les codes de fin sont pris en charge pour la réponse.
  • DeclareTrailer ajoute le nom de code de fin donné à l’en-tête de réponse Trailer. La déclaration des codes de fin d’une réponse est facultative, mais recommandée. Si DeclareTrailer est appelé, il doit être avant l’envoi des en-têtes de réponse.
  • AppendTrailer ajoute le code de fin.

Réinitialiser

La réinitialisation permet au serveur de réinitialiser une requête HTTP/2 avec un code d’erreur spécifié. Une requête de réinitialisation est considérée comme abandonnée.

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset dans l’exemple de code précédent spécifie le code d’erreur INTERNAL_ERROR. Pour plus d’informations sur les codes d’erreur HTTP/2, consultez la section du code d’erreur de spécification HTTP/2.