IISHttpContext.FeatureCollection.Protocol recognizes HTTP/2 (#14412)

This commit is contained in:
Günther Foidl 2019-09-25 18:18:18 +02:00 committed by Chris Ross
parent 0d412c3775
commit 752d99ca53
4 changed files with 26 additions and 45 deletions

View File

@ -174,23 +174,7 @@ namespace Microsoft.AspNetCore.Server.HttpSys
{
if (IsNotInitialized(Fields.Protocol))
{
var protocol = Request.ProtocolVersion;
if (protocol == Constants.V2)
{
_httpProtocolVersion = "HTTP/2";
}
else if (protocol == Constants.V1_1)
{
_httpProtocolVersion = "HTTP/1.1";
}
else if (protocol == Constants.V1_0)
{
_httpProtocolVersion = "HTTP/1.0";
}
else
{
_httpProtocolVersion = "HTTP/" + protocol.ToString(2);
}
_httpProtocolVersion = Request.ProtocolVersion.GetHttpProtocolVersion();
SetInitialized(Fields.Protocol);
}
return _httpProtocolVersion;

View File

@ -15,6 +15,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Http.Features.Authentication;
using Microsoft.AspNetCore.HttpSys.Internal;
using Microsoft.AspNetCore.Server.IIS.Core.IO;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;
@ -37,7 +38,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
// then the list of `implementedFeatures` in the generated code project MUST also be updated.
private int _featureRevision;
private string _httpProtocolVersion = null;
private string _httpProtocolVersion;
private X509Certificate2 _certificate;
private List<KeyValuePair<Type, object>> MaybeExtra;
@ -86,30 +87,8 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
string IHttpRequestFeature.Protocol
{
get
{
if (_httpProtocolVersion == null)
{
var protocol = HttpVersion;
if (protocol.Major == 1 && protocol.Minor == 1)
{
_httpProtocolVersion = "HTTP/1.1";
}
else if (protocol.Major == 1 && protocol.Minor == 0)
{
_httpProtocolVersion = "HTTP/1.0";
}
else
{
_httpProtocolVersion = "HTTP/" + protocol.ToString(2);
}
}
return _httpProtocolVersion;
}
set
{
_httpProtocolVersion = value;
}
get => _httpProtocolVersion ??= HttpVersion.GetHttpProtocolVersion();
set => _httpProtocolVersion = value;
}
string IHttpRequestFeature.Scheme

View File

@ -15,8 +15,8 @@ namespace Microsoft.AspNetCore.HttpSys.Internal
internal const string SchemeDelimiter = "://";
internal const string DefaultServerAddress = "http://localhost:5000";
internal static Version V1_0 = new Version(1, 0);
internal static Version V1_1 = new Version(1, 1);
internal static Version V2 = new Version(2, 0);
internal static readonly Version V1_0 = new Version(1, 0);
internal static readonly Version V1_1 = new Version(1, 1);
internal static readonly Version V2 = new Version(2, 0);
}
}

View File

@ -0,0 +1,18 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
namespace Microsoft.AspNetCore.HttpSys.Internal
{
internal static class Extensions
{
public static string GetHttpProtocolVersion(this Version version) => version switch
{
{ Major: 2, Minor: 0 } => "HTTP/2",
{ Major: 1, Minor: 1 } => "HTTP/1.1",
{ Major: 1, Minor: 0 } => "HTTP/1.0",
_ => "HTTP/" + version.ToString(2)
};
}
}