Uso de ASP.NET Core con HTTP/2 en IIS
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión .NET 8 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión .NET 8 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión .NET 8 de este artículo.
Por Justin Kotalik
HTTP/2 es compatible con ASP.NET Core en los escenarios de implementación de IIS siguientes:
- Windows 2016 o posterior; Windows 10 o posterior
- IIS 10 o posterior
- Conexión con TLS 1.2 o una versión posterior
- Al hospedar fuera del proceso: Las conexiones de servidor perimetral de acceso público usan HTTP/2, pero la conexión de proxy inverso al servidor de Kestrel usa HTTP/1.1.
Para una implementación dentro del proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol
notifica HTTP/2
. Para una implementación fuera del proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol
notifica HTTP/1.1
.
Para más información sobre los modelos de hospedaje en proceso y fuera de proceso, vea Módulo ASP.NET Core (ANCM) para IIS.
HTTP/2 está habilitado de forma predeterminada para las conexiones HTTPS/TLS. Las conexiones vuelven a HTTP/1.1 si no se establece una conexión HTTP/2. Para más información sobre la configuración HTTP/2 con implementaciones de IIS, vea HTTP/2 en IIS.
Características avanzadas de HTTP/2 para admitir gRPC
Las características adicionales de HTTP/2 en IIS admiten gRPC, incluida la compatibilidad con los finalizadores de respuesta y el envío de marcos de restablecimiento.
Requisitos para ejecutar gRPC en IIS:
- Hospedaje dentro del proceso.
- Windows 11, compilación 22000 o posterior, o Windows Server 2022, compilación 20348 o posterior.
- Conexión con TLS 1.2 o posterior.
Clips finales
Los finalizadores HTTP son similares a los encabezados HTTP, salvo que se envían después de enviar el cuerpo de la respuesta. Para IIS y HTTP.sys, solo se admiten los finalizadores de respuesta HTTP/2.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
En el código de ejemplo anterior:
SupportsTrailers
garantiza que los finalizadores se admitan para la respuesta.DeclareTrailer
agrega el nombre del finalizador dado al encabezado de respuestaTrailer
. Declarar los finalizadores de una respuesta es opcional, pero se recomienda. Si se llama aDeclareTrailer
, debe ser antes de que se envíen los encabezados de respuesta.AppendTrailer
anexa el finalizador.
Reset
Un restablecimiento permite que el servidor restablezca una solicitud HTTP/2 con un código de error especificado. Una solicitud de restablecimiento se considera una anulación.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
En el ejemplo de código anterior, Reset
especifica el código de error de INTERNAL_ERROR
. Para obtener más información sobre los códigos de error HTTP/2, visite la sección de código de error de especificación de HTTP/2.