Browse Source

Improve and fix etags.

pull/854/head
Sebastian 4 years ago
parent
commit
b3989048c1
  1. 4
      backend/src/Squidex.Web/Pipeline/CachingKeysMiddleware.cs
  2. 2
      backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  3. 26
      backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs

4
backend/src/Squidex.Web/Pipeline/CachingKeysMiddleware.cs

@ -36,6 +36,8 @@ namespace Squidex.Web.Pipeline
{
var httpContext = (HttpContext)_;
cachingManager.Finish(httpContext);
if (httpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag))
{
if (!cachingOptions.StrongETag && !ETagUtils.IsWeakEtag(etag))
@ -44,8 +46,6 @@ namespace Squidex.Web.Pipeline
}
}
cachingManager.Finish(httpContext);
return Task.CompletedTask;
}, context);

2
backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -212,8 +212,6 @@ namespace Squidex.Areas.Api.Controllers.Contents
return ContentDto.FromContent(content, Resources);
});
Response.Headers[HeaderNames.ETag] = content.ToEtag();
return Ok(response);
}

26
backend/tests/Squidex.Web.Tests/Pipeline/CachingKeysMiddlewareTests.cs

@ -306,7 +306,31 @@ namespace Squidex.Web.Pipeline
cachingManager.AddDependency(12);
});
Assert.True(httpContext.Response.Headers[HeaderNames.ETag].ToString().Length > 20);
var etag = httpContext.Response.Headers[HeaderNames.ETag].ToString();
Assert.StartsWith("W/", etag, StringComparison.Ordinal);
Assert.True(etag.Length > 20);
}
[Fact]
public async Task Should_generate_strong_etag_from_ids_and_versions()
{
var id1 = DomainId.NewGuid();
var id2 = DomainId.NewGuid();
cachingOptions.StrongETag = true;
await MakeRequestAsync(() =>
{
cachingManager.AddDependency(id1, 12);
cachingManager.AddDependency(id2, 12);
cachingManager.AddDependency(12);
});
var etag = httpContext.Response.Headers[HeaderNames.ETag].ToString();
Assert.False(etag.StartsWith("W/", StringComparison.Ordinal));
Assert.True(etag.Length > 20);
}
[Fact]

Loading…
Cancel
Save