Экспресс контроль статического кеша файлов - PullRequest
0 голосов
/ 10 октября 2019

Я настроил файл рабочей подачи с этой целью:
- использовать агрессивный кэш (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-кешем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...