diff --git a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs b/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs index da7251d108..425a291db5 100644 --- a/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs +++ b/src/Microsoft.AspNetCore.ResponseCaching/ResponseCacheMiddleware.cs @@ -336,7 +336,7 @@ namespace Microsoft.AspNetCore.ResponseCaching { foreach (var tag in ifNoneMatchHeader) { - if (cachedResponseHeaders.ETag.Compare(tag, useStrongComparison: true)) + if (cachedResponseHeaders.ETag.Compare(tag, useStrongComparison: false)) { return true; } diff --git a/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs b/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs index 138ed88af3..0f7eec6e82 100644 --- a/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.ResponseCaching.Tests/ResponseCacheMiddlewareTests.cs @@ -196,16 +196,31 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests Assert.False(ResponseCacheMiddleware.ConditionalRequestSatisfied(context)); } - [Fact] - public void ConditionalRequestSatisfied_IfNoneMatch_ExplicitWithMatch_Passes() + public static TheoryData EquivalentWeakETags + { + get + { + return new TheoryData + { + { new EntityTagHeaderValue("\"tag\""), new EntityTagHeaderValue("\"tag\"") }, + { new EntityTagHeaderValue("\"tag\"", true), new EntityTagHeaderValue("\"tag\"") }, + { new EntityTagHeaderValue("\"tag\""), new EntityTagHeaderValue("\"tag\"", true) }, + { new EntityTagHeaderValue("\"tag\"", true), new EntityTagHeaderValue("\"tag\"", true) } + }; + } + } + + [Theory] + [MemberData(nameof(EquivalentWeakETags))] + public void ConditionalRequestSatisfied_IfNoneMatch_ExplicitWithMatch_Passes(EntityTagHeaderValue responseETag, EntityTagHeaderValue requestETag) { var context = TestUtils.CreateTestContext(); context.CachedResponseHeaders = new ResponseHeaders(new HeaderDictionary()) { - ETag = new EntityTagHeaderValue("\"E1\"") + ETag = responseETag }; - context.TypedRequestHeaders.IfNoneMatch = new List(new[] { new EntityTagHeaderValue("\"E1\"") }); + context.TypedRequestHeaders.IfNoneMatch = new List(new[] { requestETag }); Assert.True(ResponseCacheMiddleware.ConditionalRequestSatisfied(context)); }