Skip to content
This repository was archived by the owner on Nov 22, 2018. It is now read-only.

Commit 313e047

Browse files
committed
Relocate improvements to HttpAbstractions
1 parent 9c94a77 commit 313e047

File tree

8 files changed

+53
-227
lines changed

8 files changed

+53
-227
lines changed

src/Microsoft.AspNetCore.ResponseCaching/CacheControlValues.cs

-21
This file was deleted.

src/Microsoft.AspNetCore.ResponseCaching/Internal/HttpHeaderParsingHelpers.cs

-118
This file was deleted.

src/Microsoft.AspNetCore.ResponseCaching/Internal/MemoryResponseCache.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public MemoryResponseCache(IMemoryCache cache)
2424
public Task<IResponseCacheEntry> GetAsync(string key)
2525
{
2626
var entry = _cache.Get(key);
27-
27+
2828
var memoryCachedResponse = entry as MemoryCachedResponse;
2929
if (memoryCachedResponse != null)
3030
{

src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCachingContext.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ internal DateTimeOffset? ResponseDate
6565
{
6666
_parsedResponseDate = true;
6767
DateTimeOffset date;
68-
if (HttpHeaderParsingHelpers.TryParseHeaderDate(HttpContext.Response.Headers[HeaderNames.Date], out date))
68+
if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers[HeaderNames.Date], out date))
6969
{
7070
_responseDate = date;
7171
}
@@ -92,7 +92,7 @@ internal DateTimeOffset? ResponseExpires
9292
{
9393
_parsedResponseExpires = true;
9494
DateTimeOffset expires;
95-
if (HttpHeaderParsingHelpers.TryParseHeaderDate(HttpContext.Response.Headers[HeaderNames.Expires], out expires))
95+
if (HeaderUtilities.TryParseDate(HttpContext.Response.Headers[HeaderNames.Expires], out expires))
9696
{
9797
_responseExpires = expires;
9898
}
@@ -112,7 +112,7 @@ internal TimeSpan? ResponseSharedMaxAge
112112
if (!_parsedResponseSharedMaxAge)
113113
{
114114
_parsedResponseSharedMaxAge = true;
115-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.SharedMaxAgeString, out _responseSharedMaxAge);
115+
HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.SharedMaxAgeString, out _responseSharedMaxAge);
116116
}
117117
return _responseSharedMaxAge;
118118
}
@@ -125,7 +125,7 @@ internal TimeSpan? ResponseMaxAge
125125
if (!_parsedResponseMaxAge)
126126
{
127127
_parsedResponseMaxAge = true;
128-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.MaxAgeString, out _responseMaxAge);
128+
HeaderUtilities.TryParseSeconds(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.MaxAgeString, out _responseMaxAge);
129129
}
130130
return _responseMaxAge;
131131
}

src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCachingPolicyProvider.cs

+15-20
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public virtual bool IsRequestCacheable(ResponseCachingContext context)
3030
// Verify request cache-control parameters
3131
if (!StringValues.IsNullOrEmpty(request.Headers[HeaderNames.CacheControl]))
3232
{
33-
if (HttpHeaderParsingHelpers.HeaderContains(request.Headers[HeaderNames.CacheControl], CacheControlValues.NoCacheString))
33+
if (HeaderUtilities.ContainsCacheDirective(request.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.NoCacheString))
3434
{
3535
context.Logger.LogRequestWithNoCacheNotCacheable();
3636
return false;
@@ -40,7 +40,7 @@ public virtual bool IsRequestCacheable(ResponseCachingContext context)
4040
{
4141
// Support for legacy HTTP 1.0 cache directive
4242
var pragmaHeaderValues = request.Headers[HeaderNames.Pragma];
43-
if (HttpHeaderParsingHelpers.HeaderContains(request.Headers[HeaderNames.Pragma], CacheControlValues.NoCacheString))
43+
if (HeaderUtilities.ContainsCacheDirective(request.Headers[HeaderNames.Pragma], CacheControlHeaderValue.NoCacheString))
4444
{
4545
context.Logger.LogRequestWithPragmaNoCacheNotCacheable();
4646
return false;
@@ -55,27 +55,22 @@ public virtual bool IsResponseCacheable(ResponseCachingContext context)
5555
var responseCacheControlHeader = context.HttpContext.Response.Headers[HeaderNames.CacheControl];
5656

5757
// Only cache pages explicitly marked with public
58-
if (!HttpHeaderParsingHelpers.HeaderContains(responseCacheControlHeader, CacheControlValues.PublicString))
58+
if (!HeaderUtilities.ContainsCacheDirective(responseCacheControlHeader, CacheControlHeaderValue.PublicString))
5959
{
6060
context.Logger.LogResponseWithoutPublicNotCacheable();
6161
return false;
6262
}
6363

6464
// Check no-store
65-
if (HttpHeaderParsingHelpers.HeaderContains(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlValues.NoStoreString))
66-
{
67-
context.Logger.LogResponseWithNoStoreNotCacheable();
68-
return false;
69-
}
70-
71-
if (HttpHeaderParsingHelpers.HeaderContains(responseCacheControlHeader, CacheControlValues.NoStoreString))
65+
if (HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.NoStoreString)
66+
|| HeaderUtilities.ContainsCacheDirective(responseCacheControlHeader, CacheControlHeaderValue.NoStoreString))
7267
{
7368
context.Logger.LogResponseWithNoStoreNotCacheable();
7469
return false;
7570
}
7671

7772
// Check no-cache
78-
if (HttpHeaderParsingHelpers.HeaderContains(responseCacheControlHeader, CacheControlValues.NoCacheString))
73+
if (HeaderUtilities.ContainsCacheDirective(responseCacheControlHeader, CacheControlHeaderValue.NoCacheString))
7974
{
8075
context.Logger.LogResponseWithNoCacheNotCacheable();
8176
return false;
@@ -99,7 +94,7 @@ public virtual bool IsResponseCacheable(ResponseCachingContext context)
9994
}
10095

10196
// Check private
102-
if (HttpHeaderParsingHelpers.HeaderContains(responseCacheControlHeader, CacheControlValues.PrivateString))
97+
if (HeaderUtilities.ContainsCacheDirective(responseCacheControlHeader, CacheControlHeaderValue.PrivateString))
10398
{
10499
context.Logger.LogResponseWithPrivateNotCacheable();
105100
return false;
@@ -159,20 +154,20 @@ public virtual bool IsResponseCacheable(ResponseCachingContext context)
159154
public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
160155
{
161156
var age = context.CachedEntryAge.Value;
162-
var cachedControlHeaders = context.CachedResponseHeaders[HeaderNames.CacheControl];
157+
var cachedCacheControlHeaders = context.CachedResponseHeaders[HeaderNames.CacheControl];
163158
var requestCacheControlHeaders = context.HttpContext.Request.Headers[HeaderNames.CacheControl];
164159

165160
// Add min-fresh requirements
166161
TimeSpan? minFresh;
167-
if (HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MinFreshString, out minFresh))
162+
if (HeaderUtilities.TryParseSeconds(requestCacheControlHeaders, CacheControlHeaderValue.MinFreshString, out minFresh))
168163
{
169164
age += minFresh.Value;
170165
context.Logger.LogExpirationMinFreshAdded(minFresh.Value);
171166
}
172167

173168
// Validate shared max age, this overrides any max age settings for shared caches
174169
TimeSpan? cachedSharedMaxAge;
175-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(cachedControlHeaders, CacheControlValues.SharedMaxAgeString, out cachedSharedMaxAge);
170+
HeaderUtilities.TryParseSeconds(cachedCacheControlHeaders, CacheControlHeaderValue.SharedMaxAgeString, out cachedSharedMaxAge);
176171

177172
if (age >= cachedSharedMaxAge)
178173
{
@@ -183,24 +178,24 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
183178
else if (!cachedSharedMaxAge.HasValue)
184179
{
185180
TimeSpan? requestMaxAge;
186-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MaxAgeString, out requestMaxAge);
181+
HeaderUtilities.TryParseSeconds(requestCacheControlHeaders, CacheControlHeaderValue.MaxAgeString, out requestMaxAge);
187182

188183
TimeSpan? cachedMaxAge;
189-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(cachedControlHeaders, CacheControlValues.MaxAgeString, out cachedMaxAge);
184+
HeaderUtilities.TryParseSeconds(cachedCacheControlHeaders, CacheControlHeaderValue.MaxAgeString, out cachedMaxAge);
190185

191186
var lowestMaxAge = cachedMaxAge < requestMaxAge ? cachedMaxAge : requestMaxAge ?? cachedMaxAge;
192187
// Validate max age
193188
if (age >= lowestMaxAge)
194189
{
195190
// Must revalidate
196-
if (HttpHeaderParsingHelpers.HeaderContains(cachedControlHeaders, CacheControlValues.MustRevalidateString))
191+
if (HeaderUtilities.ContainsCacheDirective(cachedCacheControlHeaders, CacheControlHeaderValue.MustRevalidateString))
197192
{
198193
context.Logger.LogExpirationMustRevalidate(age, lowestMaxAge.Value);
199194
return false;
200195
}
201196

202197
TimeSpan? requestMaxStale;
203-
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MaxStaleString, out requestMaxStale);
198+
HeaderUtilities.TryParseSeconds(requestCacheControlHeaders, CacheControlHeaderValue.MaxStaleString, out requestMaxStale);
204199

205200
// Request allows stale values
206201
if (requestMaxStale.HasValue && age - lowestMaxAge < requestMaxStale)
@@ -216,7 +211,7 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
216211
{
217212
// Validate expiration
218213
DateTimeOffset expires;
219-
if (HttpHeaderParsingHelpers.TryParseHeaderDate(context.CachedResponseHeaders[HeaderNames.Expires], out expires) &&
214+
if (HeaderUtilities.TryParseDate(context.CachedResponseHeaders[HeaderNames.Expires], out expires) &&
220215
context.ResponseTime.Value >= expires)
221216
{
222217
context.Logger.LogExpirationExpiresExceeded(context.ResponseTime.Value, expires);

src/Microsoft.AspNetCore.ResponseCaching/ResponseCachingMiddleware.cs

+14-16
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5+
using System.Collections.Generic;
56
using System.Globalization;
67
using System.Threading.Tasks;
78
using Microsoft.AspNetCore.Http;
89
using Microsoft.AspNetCore.Http.Features;
9-
using Microsoft.AspNetCore.Http.Headers;
1010
using Microsoft.AspNetCore.ResponseCaching.Internal;
1111
using Microsoft.Extensions.Internal;
1212
using Microsoft.Extensions.Logging;
@@ -198,7 +198,7 @@ internal async Task<bool> TryServeFromCacheAsync(ResponseCachingContext context)
198198
}
199199
}
200200

201-
if (HttpHeaderParsingHelpers.HeaderContains(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlValues.OnlyIfCachedString))
201+
if (HeaderUtilities.ContainsCacheDirective(context.HttpContext.Request.Headers[HeaderNames.CacheControl], CacheControlHeaderValue.OnlyIfCachedString))
202202
{
203203
_logger.LogGatewayTimeoutServed();
204204
context.HttpContext.Response.StatusCode = StatusCodes.Status504GatewayTimeout;
@@ -365,20 +365,18 @@ internal static bool ContentIsNotModified(ResponseCachingContext context)
365365
return true;
366366
}
367367

368-
if (!StringValues.IsNullOrEmpty(cachedResponseHeaders[HeaderNames.ETag]))
368+
EntityTagHeaderValue eTag;
369+
IList<EntityTagHeaderValue> ifNoneMatchEtags;
370+
if (!StringValues.IsNullOrEmpty(cachedResponseHeaders[HeaderNames.ETag])
371+
&& EntityTagHeaderValue.TryParse(cachedResponseHeaders[HeaderNames.ETag], out eTag)
372+
&& EntityTagHeaderValue.TryParseList(ifNoneMatchHeader, out ifNoneMatchEtags))
369373
{
370-
EntityTagHeaderValue eTag;
371-
if (EntityTagHeaderValue.TryParse(cachedResponseHeaders[HeaderNames.ETag], out eTag))
374+
foreach (var requestETag in ifNoneMatchEtags)
372375
{
373-
foreach (var tag in ifNoneMatchHeader)
376+
if (eTag.Compare(requestETag, useStrongComparison: false))
374377
{
375-
EntityTagHeaderValue requestETag;
376-
if (EntityTagHeaderValue.TryParse(tag, out requestETag) &&
377-
eTag.Compare(requestETag, useStrongComparison: false))
378-
{
379-
context.Logger.LogNotModifiedIfNoneMatchMatched(requestETag);
380-
return true;
381-
}
378+
context.Logger.LogNotModifiedIfNoneMatchMatched(requestETag);
379+
return true;
382380
}
383381
}
384382
}
@@ -389,14 +387,14 @@ internal static bool ContentIsNotModified(ResponseCachingContext context)
389387
if (!StringValues.IsNullOrEmpty(ifUnmodifiedSince))
390388
{
391389
DateTimeOffset modified;
392-
if (!HttpHeaderParsingHelpers.TryParseHeaderDate(cachedResponseHeaders[HeaderNames.LastModified], out modified) &&
393-
!HttpHeaderParsingHelpers.TryParseHeaderDate(cachedResponseHeaders[HeaderNames.Date], out modified))
390+
if (!HeaderUtilities.TryParseDate(cachedResponseHeaders[HeaderNames.LastModified], out modified) &&
391+
!HeaderUtilities.TryParseDate(cachedResponseHeaders[HeaderNames.Date], out modified))
394392
{
395393
return false;
396394
}
397395

398396
DateTimeOffset unmodifiedSince;
399-
if (HttpHeaderParsingHelpers.TryParseHeaderDate(ifUnmodifiedSince, out unmodifiedSince) &&
397+
if (HeaderUtilities.TryParseDate(ifUnmodifiedSince, out unmodifiedSince) &&
400398
modified <= unmodifiedSince)
401399
{
402400
context.Logger.LogNotModifiedIfUnmodifiedSinceSatisfied(modified, unmodifiedSince);

0 commit comments

Comments
 (0)