From 8f658ff4e6dd6553bcebc8647cf2e8ee6d4aa723 Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Tue, 27 Aug 2019 12:43:19 +0800 Subject: Add Cache-Control and ETag headers for 304 to satisfy standards. --- Timeline/Controllers/UserAvatarController.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'Timeline/Controllers/UserAvatarController.cs') diff --git a/Timeline/Controllers/UserAvatarController.cs b/Timeline/Controllers/UserAvatarController.cs index bbfad6af..d072bff2 100644 --- a/Timeline/Controllers/UserAvatarController.cs +++ b/Timeline/Controllers/UserAvatarController.cs @@ -64,9 +64,13 @@ namespace Timeline.Controllers public async Task Get([FromRoute] string username) { const string IfNonMatchHeaderKey = "If-None-Match"; + const string CacheControlHeaderKey = "Cache-Control"; + const string CacheControlHeaderValue = "no-cache, must-revalidate, max-age=1"; + try { - var eTag = new EntityTagHeaderValue($"\"{await _service.GetAvatarETag(username)}\""); + var eTagValue = $"\"{await _service.GetAvatarETag(username)}\""; + var eTag = new EntityTagHeaderValue(eTagValue); if (Request.Headers.TryGetValue(IfNonMatchHeaderKey, out var value)) { @@ -74,13 +78,17 @@ namespace Timeline.Controllers return BadRequest(CommonResponse.BadIfNonMatch()); if (eTagList.First(e => e.Equals(eTag)) != null) + { + Response.Headers.Add(CacheControlHeaderKey, CacheControlHeaderValue); + Response.Headers.Add("ETag", eTagValue); return StatusCode(StatusCodes.Status304NotModified); + } } var avatarInfo = await _service.GetAvatar(username); var avatar = avatarInfo.Avatar; - Response.Headers.Add("Cache-Control", "no-cache, must-revalidate, max-age=1"); + Response.Headers.Add(CacheControlHeaderKey, CacheControlHeaderValue); return File(avatar.Data, avatar.Type, new DateTimeOffset(avatarInfo.LastModified), eTag); } catch (UserNotExistException e) -- cgit v1.2.3