fixes for caching
This commit is contained in:
parent
bf38bb5230
commit
11a085efb3
@ -1,8 +1,11 @@
|
|||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
using Microsoft.AspNetCore.DataProtection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Net.Http.Headers;
|
||||||
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
using System.Text.Unicode;
|
using System.Text.Unicode;
|
||||||
@ -89,7 +92,36 @@ namespace GanjooRazor
|
|||||||
|
|
||||||
app.UseStatusCodePagesWithReExecute("/errors/{0}");
|
app.UseStatusCodePagesWithReExecute("/errors/{0}");
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles(new StaticFileOptions
|
||||||
|
{
|
||||||
|
OnPrepareResponse = ctx =>
|
||||||
|
{
|
||||||
|
var path = ctx.Context.Request.Path.Value ?? "";
|
||||||
|
var isExplicitlyVersioned = ctx.Context.Request.Query.ContainsKey("version") ||
|
||||||
|
ctx.Context.Request.Query.ContainsKey("v");
|
||||||
|
// /lib and /dist are third-party vendor code (jQuery, Bootstrap, TinyMCE, diff.js,
|
||||||
|
// the jPlayer skin) that isn't hand-edited, so it's safe to treat the same as
|
||||||
|
// explicitly-versioned assets even without a query string.
|
||||||
|
var isVendorPath = path.StartsWith("/lib/", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
path.StartsWith("/dist/", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
var headers = ctx.Context.Response.GetTypedHeaders();
|
||||||
|
headers.CacheControl = new CacheControlHeaderValue
|
||||||
|
{
|
||||||
|
Public = true,
|
||||||
|
// Versioned (?version=N / ?v=N) and vendor assets: the URL itself changes
|
||||||
|
// whenever the content does, so a year-long cache is safe and is what should
|
||||||
|
// eliminate most of the repeated p8.css/bk.js/user-panel.css/js downloads seen
|
||||||
|
// in the IIS logs.
|
||||||
|
// Everything else: no version query to rely on, so a conservative 6-hour cache
|
||||||
|
// still cuts a lot of redundant requests without risking long-lived staleness
|
||||||
|
// if someone edits chart.js/r2.js/etc. without remembering to bump a version.
|
||||||
|
MaxAge = (isExplicitlyVersioned || isVendorPath)
|
||||||
|
? TimeSpan.FromDays(365)
|
||||||
|
: TimeSpan.FromHours(6)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user