Я попытался кэшировать ответ json из запроса api с помощью Etag. я звоню что-то вроде этого http://localhost:3000/api/config и получение:Кэш браузера: ответ Json
Response Headers:
Cache-Control: общественность, макс возраста = 31557600
соединения: держать-жив
Content-Length: 11
Content-Type: применение/JSON; кодировка = UTF-8
Дата: Ср, 13 мая 2015 11:41:52 GMT
ETag: "94d52736bcd99b1ac771f13b1bbdf622"
X-Powered-By: Экспресс
Resonse: {ID: 1}
Я ожидал, что браузер будет кэшировать ответ и отправить Etag с помощью следующего триггера запроса на «f5». Но это не так.
Заголовки запросов второго запроса:
Accept: Текст/HTML, приложение/XHTML + XML, приложение/XML; д = 0,9, образ/WebP, /; д = 0,8
Accept-Encoding: GZIP, выкачать, SDCH
не Accept-Language: де-DE, де, Q = 0.8, EN-US; д = 0,6, ан; д = 0,4
Cache-Control: нет-кэша
Connection: Keep-жив
Хост: localhost: 3000
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/42.0.2311.135 Safari/537.36
Невозможно ли кэшировать чистый ответ json, получая прямые запросы api?
Или мне что-то не хватает.
API-интерфейс является узлом тест implemantation расслоение плотной сделано с экспресс:
router.get('/config', function(req, res) {
var eTag = crypto.createHash('md5').update(JSON.stringify(config)).digest('hex');
res.setHeader('ETag', '"' + eTag + '"');
res.setHeader('Content-Type', 'application/json');
res.setHeader('Cache-Control', 'public, max-age=31557600');
});
Testet с Chrom (42.x) и светлячок (37.x)
Thx для ответа.
Да, вы можете кэшировать ответы в формате JSON. На первый взгляд это похоже на проблему с браузером. Вы не должны отправлять «прагма: no-cache» в заголовки запроса, если вы не отключили кеш в хром-отладчике или в других настройках вашего браузера. Как вы выдаете этот запрос? –
Я просто вызываю маршрут api, используя браузер url bar. Я также попытался вызвать маршрут, используя тег скрипта, например , возвращающий объект javascript var config = {...}. –
Я читал, что это должно быть возможно с помощью запроса ajax, но мне нужен прямой вызов. –