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

Commit dda9376

Browse files
committed
Perf: More efficient range header checks.
1 parent 5926212 commit dda9376

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/Microsoft.AspNetCore.StaticFiles/StaticFileContext.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.AspNetCore.StaticFiles.Infrastructure;
1616
using Microsoft.Extensions.FileProviders;
1717
using Microsoft.Extensions.Logging;
18+
using Microsoft.Extensions.Primitives;
1819
using Microsoft.Net.Http.Headers;
1920

2021
namespace Microsoft.AspNetCore.StaticFiles
@@ -228,21 +229,32 @@ private void ComputeRange()
228229
return;
229230
}
230231

231-
var rangeHeader = _requestHeaders.Range;
232-
if (rangeHeader == null)
232+
var rawRangeHeader = _request.Headers[HeaderNames.Range];
233+
if (StringValues.IsNullOrEmpty(rawRangeHeader))
233234
{
234235
return;
235236
}
236237

237-
if (rangeHeader.Ranges.Count > 1)
238+
// Perf: Check for a single entry before parsing it
239+
if (rawRangeHeader.Count > 1 || rawRangeHeader[0].IndexOf(',') >= 0)
238240
{
239241
// The spec allows for multiple ranges but we choose not to support them because the client may request
240242
// very strange ranges (e.g. each byte separately, overlapping ranges, etc.) that could negatively
241243
// impact the server. Ignore the header and serve the response normally.
242-
_logger.LogMultipleFileRanges(rangeHeader.ToString());
244+
_logger.LogMultipleFileRanges(rawRangeHeader.ToString());
243245
return;
244246
}
245247

248+
var rangeHeader = _requestHeaders.Range;
249+
if (rangeHeader == null)
250+
{
251+
// Invalid
252+
return;
253+
}
254+
255+
// Already verified above
256+
Debug.Assert(rangeHeader.Ranges.Count == 1);
257+
246258
// 14.27 If-Range
247259
var ifRangeHeader = _requestHeaders.IfRange;
248260
if (ifRangeHeader != null)

0 commit comments

Comments
 (0)