File tree Expand file tree Collapse file tree 4 files changed +14
-22
lines changed
src/Grpc.AspNetCore.Server/Internal
test/FunctionalTests/Server Expand file tree Collapse file tree 4 files changed +14
-22
lines changed Original file line number Diff line number Diff line change @@ -34,8 +34,8 @@ internal static class GrpcProtocolConstants
3434 internal static readonly string Http2Protocol = HttpProtocol . Http2 ;
3535#else
3636 internal const string Http2Protocol = "HTTP/2" ;
37- #endif
3837 internal const string Http20Protocol = "HTTP/2.0" ; // This is what IIS sets
38+ #endif
3939
4040#if NET5_0
4141 internal static readonly string TimeoutHeader = HeaderNames . GrpcTimeout ;
Original file line number Diff line number Diff line change @@ -70,20 +70,11 @@ public void Reset()
7070
7171 private ICompressionProvider ? ResolveCompressionProvider ( )
7272 {
73- Debug . Assert (
74- _serverCallContext . ResponseGrpcEncoding != null ,
75- "Response encoding should have been calculated at this point." ) ;
76-
77- var canCompress =
73+ if ( _serverCallContext . ResponseGrpcEncoding != null &&
7874 GrpcProtocolHelpers . CanWriteCompressed ( _serverCallContext . WriteOptions ) &&
79- ! GrpcProtocolConstants . IsGrpcEncodingIdentity ( _serverCallContext . ResponseGrpcEncoding ) ;
80-
81- if ( canCompress )
75+ _serverCallContext . Options . CompressionProviders . TryGetValue ( _serverCallContext . ResponseGrpcEncoding , out var compressionProvider ) )
8276 {
83- if ( _serverCallContext . Options . CompressionProviders . TryGetValue ( _serverCallContext . ResponseGrpcEncoding , out var compressionProvider ) )
84- {
85- return compressionProvider ;
86- }
77+ return compressionProvider ;
8778 }
8879
8980 return null ;
Original file line number Diff line number Diff line change @@ -382,12 +382,13 @@ public void Initialize(ISystemClock? clock = null)
382382 {
383383 ResponseGrpcEncoding = serviceDefaultCompression ;
384384 }
385- else
385+
386+ // grpc-encoding response header is optional and is inferred as 'identity' when not present.
387+ // Only write a non-identity value for performance.
388+ if ( ResponseGrpcEncoding != null )
386389 {
387- ResponseGrpcEncoding = GrpcProtocolConstants . IdentityGrpcEncoding ;
390+ HttpContext . Response . Headers [ GrpcProtocolConstants . MessageEncodingHeader ] = ResponseGrpcEncoding ;
388391 }
389-
390- HttpContext . Response . Headers [ GrpcProtocolConstants . MessageEncodingHeader ] = ResponseGrpcEncoding ;
391392 }
392393
393394 private Activity ? GetHostActivity ( )
@@ -530,11 +531,11 @@ internal bool IsEncodingInRequestAcceptEncoding(string encoding)
530531
531532 internal void ValidateAcceptEncodingContainsResponseEncoding ( )
532533 {
533- Debug . Assert ( ResponseGrpcEncoding != null ) ;
534+ var resolvedResponseGrpcEncoding = ResponseGrpcEncoding ?? GrpcProtocolConstants . IdentityGrpcEncoding ;
534535
535- if ( ! IsEncodingInRequestAcceptEncoding ( ResponseGrpcEncoding ) )
536+ if ( ! IsEncodingInRequestAcceptEncoding ( resolvedResponseGrpcEncoding ) )
536537 {
537- GrpcServerLog . EncodingNotInAcceptEncoding ( Logger , ResponseGrpcEncoding ) ;
538+ GrpcServerLog . EncodingNotInAcceptEncoding ( Logger , resolvedResponseGrpcEncoding ) ;
538539 }
539540 }
540541 }
Original file line number Diff line number Diff line change @@ -210,7 +210,7 @@ public async Task SendCompressedMessage_ServiceHasNoCompressionConfigured_Respon
210210
211211 // Assert
212212 Assert . AreEqual ( HttpStatusCode . OK , response . StatusCode ) ;
213- Assert . AreEqual ( "identity" , response . Headers . GetValues ( GrpcProtocolConstants . MessageEncodingHeader ) . Single ( ) ) ;
213+ Assert . IsFalse ( response . Headers . Contains ( GrpcProtocolConstants . MessageEncodingHeader ) ) ;
214214
215215 var responseMessage = MessageHelpers . AssertReadMessage < HelloReply > ( await response . Content . ReadAsByteArrayAsync ( ) . DefaultTimeout ( ) ) ;
216216 Assert . AreEqual ( "Hello World" , responseMessage . Message ) ;
@@ -490,7 +490,7 @@ public async Task SendIdentityGrpcAcceptEncodingToServiceWithCompression_Respons
490490
491491 // Assert
492492 Assert . AreEqual ( HttpStatusCode . OK , response . StatusCode ) ;
493- Assert . AreEqual ( "identity" , response . Headers . GetValues ( GrpcProtocolConstants . MessageEncodingHeader ) . Single ( ) ) ;
493+ Assert . IsFalse ( response . Headers . Contains ( GrpcProtocolConstants . MessageEncodingHeader ) ) ;
494494
495495 var responseMessage = MessageHelpers . AssertReadMessage < HelloReply > ( await response . Content . ReadAsByteArrayAsync ( ) . DefaultTimeout ( ) ) ;
496496 Assert . AreEqual ( "Hello World" , responseMessage . Message ) ;
You can’t perform that action at this time.
0 commit comments