Chrome показывает 200 нормально состояние в сети, даже если сервер возвращает 304 - PullRequest
1 голос
/ 04 мая 2020

Я создаю приложение для внешнего и внутреннего интерфейса. Использование Если ни один из заголовков не совпадает в запросе, мой сервер возвращает статус 304, но chrome всегда показывает статус 200. Та же реализация хорошо работает с Firefox и IE. Все заголовки размещены правильно. Я добавил кеш-контроль в max-age 0 и всегда повторный валидация. Однако chrome успешно показывает кэшированные данные, но почему я не вижу статус 304 в сети. Ниже приведены изображения с chrome и Firefox сетевой панели

Изображение с chrome Изображение из Firefox

Мой бэкэнд встроен. Ядро net и я использовал атрибут фильтра действия для возврата состояния 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 }); }
...