Chrome在网络中显示200 ok状态,即使服务器返回304



我正在构建一个前端和后端应用程序。使用请求中的If none match头,我的服务器返回304状态,但chrome始终显示200状态。同样的实现也适用于Firefox和IE。所有收割台放置正确我已将缓存控制添加到最大年龄0,并始终重新验证。然而chrome成功地显示了缓存的数据,但为什么我在网络中看不到304状态以下是chrome和Firefox网络面板的图像

镀铬图像来自Firefox 的图像

我的后端是在.net内核中构建的,我使用了action filter属性来返回ETag和304状态,下面是代码

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next){ var isRequestMethodGet = context.HttpContext.Request.Method == "GET";
bool isModified = false;
string authToken = "";
var path = context.HttpContext.Request.Path.ToString() + context.HttpContext.Request.QueryString.ToString();
if (context.HttpContext.Request.Headers.ContainsKey("Authorization"))
{
authToken = context.HttpContext.Request.Headers["Authorization"];
}
var etag = GetETag(path, authToken);
if (isRequestMethodGet)
{
var myId = context.HttpContext.Request.Headers["myId"].ToString();
var value = await distributedCacheRepository.GetCachedItem($"{redisPrefix}-{myId}");
if (value != null)
{
if (context.HttpContext.Request.Headers.Keys.Contains("If-None-Match") && context.HttpContext.Request.Headers["If-None-Match"].ToString() == etag)
{
isModified = true;
context.HttpContext.Response.StatusCode = 304;
context.Result = new StatusCodeResult((int)HttpStatusCode.NotModified);
}
}
else
{
await distributedCacheRepository.InsertKeyValueAsync($"{redisPrefix}-{myId}", myId);
}
}
if(!isRequestMethodGet || !isModified)
{
await next();
}
context.HttpContext.Response.Headers.Add("cache-control", new[] { "no-transform", "must-revalidate", "max-age=0" });
context.HttpContext.Response.Headers.Add("vary", new[] { "Accept", "Accept-Encoding", "Authorization", "Cookie" });           
context.HttpContext.Response.Headers.Add("ETag", new[] { etag }); }

是否将请求发送到其他端口/域?我遇到了和您相同的问题,服务器返回304(通过邮递员检查(,但chrome显示为200。
以下是我发现原因的方法:

  1. 在我的swagger文档中,返回304(请求从localhost:8083发送到localhost:8803(
  2. 在我的应用程序中,返回了相同的请求,但返回了200(请求从localhost:4300发送到localhost:8083(
  3. 所以我将我的应用程序请求代理到同一域(请求从localhost:4300发送到localhost:4300,然后代理到localhost:8083(
  4. 我得到了304

最新更新