-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Description
I have a gRPC call that uses HTTP/3 and it is erroring because of the response.
I tried to figure out why HttpClient is rejecting the response so I enabled Kestrel connection logging and client event source. This seems to be the specific problem:
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,27858262,0,ReadResponseAsync,Expected HEADERS as first response frame; received . ->
Complete logs below. As far as I can tell Kestrel is sending a HEADERS frame and HttpClient seems to have a problem reading it. I don't know if that is because Kestrel is doing something wrong or HttpClient is.
SendUnauthenticatedRequest_UnauthenticatedErrorResponse
Source: AuthTests.cs line 104
Duration: 489 ms
Message:
Expected: Unauthenticated
But was: Internal
TearDown : System.Exception : 1 error(s) logged.
Grpc.Net.Client.Internal.GrpcCall - ErrorStartingCall - Error starting gRPC call.
===================
System.Net.Http.HttpRequestException: The server returned an invalid or unrecognized response.
at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c3+0x115
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x444
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x77c
at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600068e+0x232
at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000742+0x1a1
at System.Net.Http.HttpConnectionPool.DetermineVersionAndSendAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000745+0xa7
at System.Net.Http.HttpConnectionPool.SendAndProcessAltSvcAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000746+0x8e
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000747+0x99
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600088e+0x14f
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60007f6+0x94
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) in System.Net.Http.dll:token 0x6000264+0xae
at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage request, Nullable`1 timeout) in C:\Development\Source\grpc-dotnet\src\Grpc.Net.Client\Internal\GrpcCall.cs:line 441
===================
Stack Trace:
AuthTests.SendUnauthenticatedRequest_UnauthenticatedErrorResponse() line 131
framework.dll:token 0x6000d7a+0x7
framework.dll:token 0x6000d33+0x1
framework.dll:token 0x60003e4+0x34
framework.dll:token 0x6000839+0x3b
framework.dll:token 0x6000838+0x1
framework.dll:token 0x6000e09+0x18
framework.dll:token 0x6000815+0x2
--TearDown
VerifyNoErrorsScope.Dispose() line 82
GrpcTestContext.Dispose() line 106
FunctionalTestBase.TearDown() line 103
Standard Output:
0.004s GrpcTestContext - Information: Starting AuthTests.SendUnauthenticatedRequest_UnauthenticatedErrorResponse
<- Event Private.InternalDiagnostics.System.Net.Http - Info : HttpClientHandler#22036639,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : SocketsHttpHandler#23095417,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : Http3DelegatingHandler#24807124,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Associate : Http3DelegatingHandler#24807124,InnerHandler,Http3DelegatingHandler#24807124,HttpClientHandler#22036639 ->
<- Event Private.InternalDiagnostics.System.Net.Http - Associate : HttpClient#1850352,.ctor,HttpClient#1850352,Http3DelegatingHandler#24807124 ->
<- Event Private.InternalDiagnostics.System.Net.Http - UriBaseAddress : https://127.0.0.1:50010/,HttpClient#1850352,1850352 ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : PushUnaryContent`2#28828555,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Associate : HttpRequestMessage#54860159,Content,HttpRequestMessage#54860159,PushUnaryContent`2#28828555 ->
0.057s Grpc.Net.Client.Internal.GrpcCall - Debug: Starting gRPC call. Method type: 'Unary', URI: 'https://127.0.0.1:50010/authorize.AuthorizedGreeter/SayHello'.
<- Event System.Net.Http - RequestStart : https,127.0.0.1,50010,/authorize.AuthorizedGreeter/SayHello,2,0,1 ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : WinInetProxyHelper#9140582,.ctor,AutoConfigUrl=(null), AutoDetect=True, Proxy=(null), ProxyBypass=(null) ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : WinInetProxyHelper#9140582,.ctor,_useProxy=True ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : WinInetProxyHelper#9140582,TryCreate,AutoSettingsUsed, calling WinHttpOpen ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : HttpConnectionHandler#57266958,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : DiagnosticsHandler#31364791,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : RedirectHandler#25445537,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - ErrorMessage : WinInetProxyHelper#9140582,GetProxyForUrl,error=12180 ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : WinInetProxyHelper#9140582,GetProxyForUrl,useProxy=False ->
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,0,0,.ctor,HttpConnectionPool https://127.0.0.1:50010 ->
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,0,0,GetHttp3ConnectionAsync,Attempting new HTTP3 connection. ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#5560867,.ctor,[conn][0x2B924849FD0] Outbound connection created ->
0.117s SERVER Microsoft.AspNetCore.Server.Kestrel.Transport.Quic - Debug: Connection id "0HMABBQ559FOE" accepted.
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#11865849,.ctor,[strm][0x2B924A155F0] Outbound unidirectional stream created in connection [conn][0x2B924849FD0]. ->
0.123s SERVER Microsoft.AspNetCore.Server.Kestrel.Connections - Debug: Connection id "0HMABBQ559FOE" accepted.
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,0,0,GetHttp3ConnectionAsync,New HTTP3 connection established. ->
0.124s SERVER Microsoft.AspNetCore.Server.Kestrel.Connections - Debug: Connection id "0HMABBQ559FOE" started.
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,.ctor,[strm][0x2B924A17BA0] Outbound bidirectional stream created in connection [conn][0x2B924849FD0]. ->
0.134s Grpc.Net.Client.Internal.GrpcCall - Debug: Sending message.
0.141s Grpc.Net.Client.Internal.GrpcCall - Trace: Serialized 'Authorize.HelloRequest' to 6 byte message.
0.145s Grpc.Net.Client.Internal.GrpcCall - Trace: Message sent.
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,ReadAsync,[strm][0x2B924A17BA0] Stream reading into Memory of '64' bytes. ->
0.155s SERVER Microsoft.AspNetCore.Server.Kestrel.Transport.Quic - Debug: Stream id "0HMABBQ559FOE:3" type Unidirectional connected.
0.172s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: WriteAsync[1]
00 .
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#46251828,ReadAsync,[strm][0x2B924AB3EC0] Stream reading into Memory of '32' bytes. ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#46251828,ReadAsync,[strm][0x2B924AB3EC0] Stream reading into Memory of '32' bytes. ->
0.181s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: WriteAsync[7]
04 05 06 80 00 80 00 .......
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#46251828,ReadAsync,[strm][0x2B924AB3EC0] Stream reading into Memory of '32' bytes. ->
0.189s SERVER Microsoft.AspNetCore.Server.Kestrel.Transport.Quic - Debug: Stream id "0HMABBQ559FOE:2" type Unidirectional accepted.
0.190s SERVER Microsoft.AspNetCore.Server.Kestrel.Transport.Quic - Debug: Stream id "0HMABBQ559FOE:0" type Bidirectional accepted.
0.196s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: ReadAsync[8]
00 04 05 06 80 01 00 00 ........
0.203s SERVER Microsoft.AspNetCore.Server.Kestrel.Http3 - Trace: Connection id "0HMABBQ559FOE:2" received SETTINGS frame for stream ID 2 with length 5.
0.206s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: ReadAsync[261]
01 40 F5 00 00 D4 D7 50 0F 31 32 37 2E 30 2E 30 .@õ..Ô×P .127.0.0
2E 31 3A 35 30 30 31 30 51 25 2F 61 75 74 68 6F .1:50010 Q%/autho
72 69 7A 65 2E 41 75 74 68 6F 72 69 7A 65 64 47 rize.Aut horizedG
72 65 65 74 65 72 2F 53 61 79 48 65 6C 6C 6F 37 reeter/S ayHello7
01 61 6C 74 2D 75 73 65 64 0F 31 32 37 2E 30 2E .alt-use d.127.0.
30 2E 31 3A 35 30 30 31 30 7F 50 14 67 72 70 63 0.1:5001 0.P.grpc
2D 64 6F 74 6E 65 74 2F 32 2E 33 38 2E 30 2E 30 -dotnet/ 2.38.0.0
32 74 65 08 74 72 61 69 6C 65 72 73 37 0D 67 72 2te.trai lers7.gr
70 63 2D 61 63 63 65 70 74 2D 65 6E 63 6F 64 69 pc-accep t-encodi
6E 67 0D 69 64 65 6E 74 69 74 79 2C 67 7A 69 70 ng.ident ity,gzip
37 04 74 72 61 63 65 70 61 72 65 6E 74 37 30 30 7.tracep arent700
2D 62 66 33 38 36 33 34 31 66 33 31 31 36 34 33 -bf38634 1f311643
37 64 38 65 35 36 31 36 35 37 35 32 36 65 34 63 7d8e5616 57526e4c
35 2D 32 66 34 30 66 32 63 63 36 66 31 39 30 35 5-2f40f2 cc6f1905
30 36 2D 30 30 7F 1D 10 61 70 70 6C 69 63 61 74 06-00... applicat
69 6F 6E 2F 67 72 70 63 00 0B 00 00 00 00 06 0A ion/grpc ........
04 74 65 73 74 .test
0.206s SERVER Microsoft.AspNetCore.Server.Kestrel.Http3 - Trace: Connection id "0HMABBQ559FOE:0" received HEADERS frame for stream ID 0 with length 245.
0.230s SERVER Microsoft.AspNetCore.Server.Kestrel.Http3 - Trace: Connection id "0HMABBQ559FOE:0" received DATA frame for stream ID 0 with length 11.
0.231s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: ReadAsync[0]
0.258s SERVER Microsoft.AspNetCore.Hosting.Diagnostics - Information: Request starting HTTP/3 POST https://127.0.0.1:50010/authorize.AuthorizedGreeter/SayHello application/grpc -
0.310s SERVER Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware - Debug: Request matched endpoint 'gRPC - /authorize.AuthorizedGreeter/SayHello'
0.348s SERVER Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler - Debug: AuthenticationScheme: Bearer was not authenticated.
0.351s SERVER Microsoft.AspNetCore.Authorization.DefaultAuthorizationService - Information: Authorization failed. These requirements were not met:
ClaimsAuthorizationRequirement:Claim.Type=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
0.367s SERVER Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler - Information: AuthenticationScheme: Bearer was challenged.
0.381s SERVER Microsoft.AspNetCore.Server.Kestrel.Http3 - Trace: Connection id "0HMABBQ559FOE:0" sending HEADERS frame for stream ID 0 with length 101.
0.384s SERVER Microsoft.AspNetCore.Server.Kestrel.Core.Internal.LoggingConnectionMiddleware - Debug: WriteAsync[104]
01 40 65 00 00 5F 30 03 34 30 31 34 64 61 74 65 .@e.._0. 4014date
1D 54 75 65 2C 20 32 30 20 4A 75 6C 20 32 30 32 .Tue, 20 Jul 202
31 20 30 39 3A 31 32 3A 34 36 20 47 4D 54 36 73 1 09:12: 46 GMT6s
65 72 76 65 72 07 4B 65 73 74 72 65 6C 37 09 77 erver.Ke strel7.w
77 77 2D 61 75 74 68 65 6E 74 69 63 61 74 65 06 ww-authe nticate.
42 65 61 72 65 72 37 07 63 6F 6E 74 65 6E 74 2D Bearer7. content-
6C 65 6E 67 74 68 01 30 length.0
0.387s SERVER Microsoft.AspNetCore.Hosting.Diagnostics - Information: Request finished HTTP/3 POST https://127.0.0.1:50010/authorize.AuthorizedGreeter/SayHello application/grpc - - 401 0 - 128.9380ms
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,27858262,0,ReadFrameEnvelopeAsync,Received frame 1 of length 101. ->
<- Event Private.InternalDiagnostics.System.Net.Http - Associate : HttpResponseMessage#22877577,RequestMessage,HttpResponseMessage#22877577,HttpRequestMessage#54860159 ->
<- Event Private.InternalDiagnostics.System.Net.Http - Info : HttpConnectionResponseContent#47259456,.ctor, ->
<- Event Private.InternalDiagnostics.System.Net.Http - Associate : HttpResponseMessage#22877577,Content,HttpResponseMessage#22877577,HttpConnectionResponseContent#47259456 ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,ReadAsync,[strm][0x2B924A17BA0] Stream reading into Memory of '64' bytes. ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,ReadAsync,[strm][0x2B924A17BA0] Stream reading into Memory of '64' bytes. ->
0.390s SERVER Microsoft.AspNetCore.Server.Kestrel - Debug: Connection id "0HMABBQ559FOE:0", Request id "0HMABBQ559FOE:0": started reading request body.
0.391s SERVER Microsoft.AspNetCore.Server.Kestrel - Debug: Connection id "0HMABBQ559FOE:0", Request id "0HMABBQ559FOE:0": done reading request body.
0.396s SERVER Microsoft.AspNetCore.Server.Kestrel.Transport.Quic - Debug: Stream id "0HMABBQ559FOE:0" shutting down writes because: "The QUIC transport's send loop completed gracefully.".
<- Event Private.InternalDiagnostics.System.Net.Http - HandlerMessage : 55334867,27858262,0,ReadResponseAsync,Expected HEADERS as first response frame; received . ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,Dispose,[strm][0x2B924A17BA0] Stream disposing True ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,Cleanup,[strm][0x2B924A17BA0] releasing handles. ->
<- Event Private.InternalDiagnostics.System.Net.Quic - Info : State#57600139,Dispose,[strm][0x2B924A17BA0] Stream disposed ->
<- Event System.Net.Http - RequestFailed : ->
<- Event Private.InternalDiagnostics.System.Net.Http - ErrorMessage : HttpClient#1850352,HandleFailure,System.Net.Http.HttpRequestException: The server returned an invalid or unrecognized response.
at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c3+0x115
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x444
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x77c
at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600068e+0x232
at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000742+0x1a1
at System.Net.Http.HttpConnectionPool.DetermineVersionAndSendAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000745+0xa7
at System.Net.Http.HttpConnectionPool.SendAndProcessAltSvcAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000746+0x8e
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000747+0x99
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600088e+0x14f
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60007f6+0x94
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) in System.Net.Http.dll:token 0x6000264+0xae ->
<- Event System.Net.Http - RequestStop : ->
0.418s Grpc.Net.Client.Internal.GrpcCall - Error: Error starting gRPC call.
System.Net.Http.HttpRequestException: The server returned an invalid or unrecognized response.
at System.Net.Http.Http3RequestStream.ReadResponseAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c3+0x115
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x444
at System.Net.Http.Http3RequestStream.SendAsync(CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60006c2+0x77c
at System.Net.Http.Http3Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600068e+0x232
at System.Net.Http.HttpConnectionPool.TrySendUsingHttp3Async(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000742+0x1a1
at System.Net.Http.HttpConnectionPool.DetermineVersionAndSendAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000745+0xa7
at System.Net.Http.HttpConnectionPool.SendAndProcessAltSvcAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000746+0x8e
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x6000747+0x99
at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x600088e+0x14f
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) in System.Net.Http.dll:token 0x60007f6+0x94
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) in System.Net.Http.dll:token 0x6000264+0xae
at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage request, Nullable`1 timeout) in C:\Development\Source\grpc-dotnet\src\Grpc.Net.Client\Internal\GrpcCall.cs:line 441
0.429s Grpc.Net.Client.Internal.GrpcCall - Information: Call failed with gRPC error status. Status code: 'Internal', Message: 'Error starting gRPC call. HttpRequestException: The server returned an invalid or unrecognized response.'.
0.430s Grpc.Net.Client.Internal.GrpcCall - Debug: Finished gRPC call.
0.431s Grpc.Net.Client.Internal.GrpcCall - Debug: gRPC call canceled.
0.474s GrpcTestContext - Information: Finishing AuthTests.SendUnauthenticatedRequest_UnauthenticatedErrorResponse
Repo: https://github.com/JamesNK/grpc-dotnet/tree/jamesnk/http3-badresponse
Test: AuthTests.SendUnauthenticatedRequest_UnauthenticatedErrorResponse (Note this type is parameterized. Need to run Http3WithTls)
.NET SDK (reflecting any global.json):
Version: 6.0.100-rc.1.21368.1
Commit: a5889518cc