Почему 2-й и 3-й запросы на одно и то же изображение не кэшируются?

Оригинальный веб-сайт не кэширует html, css или изображения так, как я думаю. Результаты Google Chrome Har для одного изображения при запросе разных страниц на веб-сайте приведены ниже. Это часть более крупного просмотра веб-сайта, пытающегося выяснить, почему браузер считает, что он должен быть кэширован, но браузер повторно запрашивается с сервера. Я удалил все хары, не связанные конкретно с этим изображением.

У меня нет никаких кеш-киллеров или кеш-блокировщиков. Я даже отправился на относительно чистый компьютер, чтобы убедиться, что не установлены какие-либо инструменты разработчика, которые могут испортить кеш.

Все заголовки запроса/ответа из первого запроса, по-видимому, подразумевают, что 2-й и 3-й запросы не должны выполнять повторные запросы, а поступать из локального кеша браузера.

Что мне не хватает?

 {
    "startedDateTime": "2017-02-10T21:21:44.273Z",
    "time": 56.46199999999624,
    "request": {
      "method": "GET",
      "url": "http://616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com/images/default-source/site-cdn/LoginLogo.png",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Accept",
          "value": "image/webp,image/*,*/*;q=0.8"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Encoding",
          "value": "gzip, deflate, sdch"
        },
        {
          "name": "Referer",
          "value": "http://authentrip.com/"
        },
        {
          "name": "Host",
          "value": "616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com"
        },
        {
          "name": "Accept-Language",
          "value": "en-US,en;q=0.8"
        },
        {
          "name": "User-Agent",
          "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
        }
      ],
      "queryString": [],
      "cookies": [],
      "headersSize": 428,
      "bodySize": 0
    },
    "response": {
      "status": 200,
      "statusText": "OK",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Date",
          "value": "Fri, 10 Feb 2017 21:21:44 GMT"
        },
        {
          "name": "Origin",
          "value": "https://mycloud.rackspace.com"
        },
        {
          "name": "Last-Modified",
          "value": "Fri, 09 Dec 2016 05:10:48 GMT"
        },
        {
          "name": "ETag",
          "value": "ab904584a8e355da2fd0437065839e10"
        },
        {
          "name": "Content-Type",
          "value": "image/png"
        },
        {
          "name": "X-Timestamp",
          "value": "1481260247.52133"
        },
        {
          "name": "Cache-Control",
          "value": "public, max-age=349"
        },
        {
          "name": "Content-Length",
          "value": "6397"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Ranges",
          "value": "bytes"
        },
        {
          "name": "X-Trans-Id",
          "value": "txbeec00752b6a4e1e9e3b5-00589e2ca4dfw1"
        },
        {
          "name": "Expires",
          "value": "Fri, 10 Feb 2017 21:27:33 GMT"
        }
      ],
      "cookies": [],
      "content": {
        "size": 6397,
        "mimeType": "image/png",
        "compression": 0
      },
      "redirectURL": "",
      "headersSize": 433,
      "bodySize": 6397,
      "_transferSize": 6830
    },
    "cache": {},
    "timings": {
      "blocked": 0.396999999992431,
      "dns": -1,
      "connect": -1,
      "send": 0.13800000000685503,
      "wait": 23.861999999994016,
      "receive": 32.06500000000294,
      "ssl": -1
    },
    "serverIPAddress": "204.2.145.184",
    "connection": "989",
    "pageref": "page_1"
  },
  {
    "startedDateTime": "2017-02-10T21:22:48.357Z",
    "time": 0,
    "request": {
      "method": "GET",
      "url": "http://616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com/images/default-source/site-cdn/LoginLogo.png",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Accept",
          "value": "image/webp,image/*,*/*;q=0.8"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Encoding",
          "value": "gzip, deflate, sdch"
        },
        {
          "name": "Referer",
          "value": "http://authentrip.com/"
        },
        {
          "name": "Host",
          "value": "616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com"
        },
        {
          "name": "Accept-Language",
          "value": "en-US,en;q=0.8"
        },
        {
          "name": "User-Agent",
          "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
        }
      ],
      "queryString": [],
      "cookies": [],
      "headersSize": 428,
      "bodySize": 0
    },
    "response": {
      "status": 200,
      "statusText": "OK",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Date",
          "value": "Fri, 10 Feb 2017 21:21:44 GMT"
        },
        {
          "name": "Origin",
          "value": "https://mycloud.rackspace.com"
        },
        {
          "name": "Last-Modified",
          "value": "Fri, 09 Dec 2016 05:10:48 GMT"
        },
        {
          "name": "ETag",
          "value": "ab904584a8e355da2fd0437065839e10"
        },
        {
          "name": "Content-Type",
          "value": "image/png"
        },
        {
          "name": "X-Timestamp",
          "value": "1481260247.52133"
        },
        {
          "name": "Cache-Control",
          "value": "public, max-age=349"
        },
        {
          "name": "Content-Length",
          "value": "6397"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Ranges",
          "value": "bytes"
        },
        {
          "name": "X-Trans-Id",
          "value": "txbeec00752b6a4e1e9e3b5-00589e2ca4dfw1"
        },
        {
          "name": "Expires",
          "value": "Fri, 10 Feb 2017 21:27:33 GMT"
        }
      ],
      "cookies": [],
      "content": {
        "size": 6397,
        "mimeType": "image/png"
      },
      "redirectURL": "",
      "headersSize": 433,
      "bodySize": 0,
      "_transferSize": 0
    },
    "cache": {},
    "timings": {
      "blocked": -1,
      "dns": -1,
      "connect": -1,
      "send": 0,
      "wait": 0,
      "receive": 0,
      "ssl": -1
    },
    "serverIPAddress": "204.2.145.184",
    "connection": "989",
    "pageref": "page_2"
  }
  {
    "startedDateTime": "2017-02-10T21:23:38.412Z",
    "time": 0,
    "request": {
      "method": "GET",
      "url": "http://616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com/images/default-source/site-cdn/LoginLogo.png",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Accept",
          "value": "image/webp,image/*,*/*;q=0.8"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Encoding",
          "value": "gzip, deflate, sdch"
        },
        {
          "name": "Referer",
          "value": "http://authentrip.com/"
        },
        {
          "name": "Host",
          "value": "616206ee2c1b2155fd11-21abbde6fa52e03b7fd037b3488bb991.r53.cf1.rackcdn.com"
        },
        {
          "name": "Accept-Language",
          "value": "en-US,en;q=0.8"
        },
        {
          "name": "User-Agent",
          "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
        }
      ],
      "queryString": [],
      "cookies": [],
      "headersSize": 428,
      "bodySize": 0
    },
    "response": {
      "status": 200,
      "statusText": "OK",
      "httpVersion": "HTTP/1.1",
      "headers": [
        {
          "name": "Date",
          "value": "Fri, 10 Feb 2017 21:21:44 GMT"
        },
        {
          "name": "Origin",
          "value": "https://mycloud.rackspace.com"
        },
        {
          "name": "Last-Modified",
          "value": "Fri, 09 Dec 2016 05:10:48 GMT"
        },
        {
          "name": "ETag",
          "value": "ab904584a8e355da2fd0437065839e10"
        },
        {
          "name": "Content-Type",
          "value": "image/png"
        },
        {
          "name": "X-Timestamp",
          "value": "1481260247.52133"
        },
        {
          "name": "Cache-Control",
          "value": "public, max-age=349"
        },
        {
          "name": "Content-Length",
          "value": "6397"
        },
        {
          "name": "Connection",
          "value": "keep-alive"
        },
        {
          "name": "Accept-Ranges",
          "value": "bytes"
        },
        {
          "name": "X-Trans-Id",
          "value": "txbeec00752b6a4e1e9e3b5-00589e2ca4dfw1"
        },
        {
          "name": "Expires",
          "value": "Fri, 10 Feb 2017 21:27:33 GMT"
        }
      ],
      "cookies": [],
      "content": {
        "size": 6397,
        "mimeType": "image/png"
      },
      "redirectURL": "",
      "headersSize": 433,
      "bodySize": 0,
      "_transferSize": 0
    },
    "cache": {},
    "timings": {
      "blocked": -1,
      "dns": -1,
      "connect": -1,
      "send": 0,
      "wait": 0,
      "receive": 0,
      "ssl": -1
    },
    "serverIPAddress": "204.2.145.184",
    "connection": "989",
    "pageref": "page_3"
  }

person DFBerry    schedule 10.02.2017    source источник


Ответы (1)


На самом деле Chrome обслуживает ответы на второй и третий запросы из кеша. Вам нужно посмотреть на свойство entry.response.bodySize.

Соответствующая выдержка из спецификации HAR:

bodySize [число] — размер тела полученного ответа в байтах. Установите в ноль в случае ответов, поступающих из кеша (304). Установите на -1, если информация недоступна.

Также есть интересная проблема со средством просмотра HAR на GitHub. Они используют функцию ниже, чтобы определить, был ли ответ на запрос из кеша:

HarModel.isCachedEntry = function(entry) {
  var response = entry.response;
  var resBodySize = response.bodySize > 0 ? response.bodySize : 0;
  return (response.status == 304 || (resBodySize === 0 && response.content && response.content.size > 0));
};
person Leonid Vasilev    schedule 13.02.2017
comment
Спасибо. Предполагалось, что он будет обслуживаться из кеша, но я просто не мог «видеть», как это происходит. приятно получить ответ - person DFBerry; 23.02.2017