Я настроил файл рабочей подачи с этой целью:
- использовать агрессивный кэш (maxage=365d
) для /static/*
файлов
- использовать ETag
кэш (maxage=0
) для /*
файлов
- перенаправить не найденные ресурсы в /index.html
с ETag
кешем (maxage=0
)
Но браузер работает не так, как ожидалось.
Вот код:
const express = require('express');
const compression = require('compression');
const path = require('path');
app.use(compression());
// MIDDLEWARE A: AGGRESSIVE CACHE FOR /static/* files
app.use(express.static(path.join(__dirname, 'static'), {
etag: false,
maxage: '365d'
}));
// MIDDLEWARE B: ETAG CACHE FOR /* files
app.use(express.static(path.join(__dirname), {
etag: true,
maxage: 0
}));
// HANDLE SPA URLs
app.get('/*', function(req, res) {
res.setHeader('Cache-Control', 'public, max-age=0');
res.sendFile(path.join(__dirname, 'index.html'));
});
Вот неожиданное поведение, которое я наблюдал:
Get /static/css/2.0b8713e3.chunk.css
:
a. ETag: W/"26f94-16db3340bb9"
возвращено, но оно должно обрабатываться промежуточным ПО Aпоэтому я не ожидал получить заголовок ETag
.
b. If-None-Match: W/"26f94-16db3340bb9"
и Cache-Control: max-age=0
будут отправлены в будущих запросах браузера, но я ожидал, что браузер будет избегать запросов отиспользуя агрессивный кеш (maxage=365d
).
Получить ресурс /favicon.png
:
c. Cache-Control: public, max-age=31536000
возвращается, но он должен обрабатываться промежуточным ПО B, так что я ожидал max-age=0
.
d. ETag: W/"5f5-16db3335010"
возвращается, как и ожидалось, но браузер не отправляет заголовок If-None-Match: W/"5f5-16db3335010"
на будущие запросы.
Можете ли вы показать мне, что я скучаюЭд, чтобы получить желаемое поведение с HTTP-кешем?