Split by commas when normalizing headers
This commit is contained in:
parent
6c13371fa0
commit
dd4799adfd
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
|
|
@ -211,7 +212,7 @@ namespace Microsoft.AspNetCore.ResponseCaching
|
|||
|
||||
// Create the cache entry now
|
||||
var response = context.HttpContext.Response;
|
||||
var varyHeaderValue = response.Headers[HeaderNames.Vary];
|
||||
var varyHeaderValue = new StringValues(response.Headers.GetCommaSeparatedValues(HeaderNames.Vary));
|
||||
var varyParamsValue = context.HttpContext.GetResponseCacheFeature()?.VaryByParams ?? StringValues.Empty;
|
||||
context.CachedResponseValidFor = context.ResponseCacheControlHeaderValue.SharedMaxAge ??
|
||||
context.ResponseCacheControlHeaderValue.MaxAge ??
|
||||
|
|
@ -222,8 +223,8 @@ namespace Microsoft.AspNetCore.ResponseCaching
|
|||
if (!StringValues.IsNullOrEmpty(varyHeaderValue) || !StringValues.IsNullOrEmpty(varyParamsValue))
|
||||
{
|
||||
// Normalize order and casing of vary by rules
|
||||
var normalizedVaryHeaderValue = GetNormalizedStringValues(varyHeaderValue);
|
||||
var normalizedVaryParamsValue = GetNormalizedStringValues(varyParamsValue);
|
||||
var normalizedVaryHeaderValue = GetOrderCasingNormalizedStringValues(varyHeaderValue);
|
||||
var normalizedVaryParamsValue = GetOrderCasingNormalizedStringValues(varyParamsValue);
|
||||
|
||||
// Update vary rules if they are different
|
||||
if (context.CachedVaryByRules == null ||
|
||||
|
|
@ -374,7 +375,7 @@ namespace Microsoft.AspNetCore.ResponseCaching
|
|||
}
|
||||
|
||||
// Normalize order and casing
|
||||
internal static StringValues GetNormalizedStringValues(StringValues stringValues)
|
||||
internal static StringValues GetOrderCasingNormalizedStringValues(StringValues stringValues)
|
||||
{
|
||||
if (stringValues.Count == 1)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -410,6 +410,18 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
Assert.NotNull(context.CachedResponse);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FinalizeCachingHeaders_SplitsVaryHeaderByCommas()
|
||||
{
|
||||
var middleware = TestUtils.CreateTestMiddleware();
|
||||
var context = TestUtils.CreateTestContext();
|
||||
context.HttpContext.Response.Headers[HeaderNames.Vary] = "HeaderB, heaDera";
|
||||
|
||||
middleware.FinalizeCacheHeaders(context);
|
||||
|
||||
Assert.Equal(new StringValues(new[] { "HEADERA", "HEADERB" }), context.CachedVaryByRules.Headers);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task FinalizeCacheBody_StoreResponseBodySeparately_IfLargerThanLimit()
|
||||
{
|
||||
|
|
@ -554,26 +566,35 @@ namespace Microsoft.AspNetCore.ResponseCaching.Tests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void NormalizeStringValues_NormalizesCasingToUpper()
|
||||
public void GetOrderCasingNormalizedStringValues_NormalizesCasingToUpper()
|
||||
{
|
||||
var uppercaseStrings = new StringValues(new[] { "STRINGA", "STRINGB" });
|
||||
var lowercaseStrings = new StringValues(new[] { "stringA", "stringB" });
|
||||
|
||||
var normalizedStrings = ResponseCacheMiddleware.GetNormalizedStringValues(lowercaseStrings);
|
||||
var normalizedStrings = ResponseCacheMiddleware.GetOrderCasingNormalizedStringValues(lowercaseStrings);
|
||||
|
||||
Assert.Equal(uppercaseStrings, normalizedStrings);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NormalizeStringValues_NormalizesOrder()
|
||||
public void GetOrderCasingNormalizedStringValues_NormalizesOrder()
|
||||
{
|
||||
var orderedStrings = new StringValues(new[] { "STRINGA", "STRINGB" });
|
||||
var reverseOrderStrings = new StringValues(new[] { "STRINGB", "STRINGA" });
|
||||
|
||||
var normalizedStrings = ResponseCacheMiddleware.GetNormalizedStringValues(reverseOrderStrings);
|
||||
var normalizedStrings = ResponseCacheMiddleware.GetOrderCasingNormalizedStringValues(reverseOrderStrings);
|
||||
|
||||
Assert.Equal(orderedStrings, normalizedStrings);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetOrderCasingNormalizedStringValues_PreservesCommas()
|
||||
{
|
||||
var originalStrings = new StringValues(new[] { "STRINGA, STRINGB" });
|
||||
|
||||
var normalizedStrings = ResponseCacheMiddleware.GetOrderCasingNormalizedStringValues(originalStrings);
|
||||
|
||||
Assert.Equal(originalStrings, normalizedStrings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue