Skip to content

Commit 2f06a7c

Browse files
committed
[CST-5729] Change in order to save header only if configured and existing
1 parent ac9be25 commit 2f06a7c

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

server.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -375,13 +375,13 @@ function cacheCheck(req, res, next) {
375375

376376
// If cached copy exists, return it to the user.
377377
if (cachedCopy && cachedCopy.page) {
378-
if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) {
379-
environment.cache.serverSide.headers.forEach((header) => {
380-
if (cachedCopy.headers[header.toLowerCase()]) {
378+
if (cachedCopy.headers) {
379+
Object.keys(cachedCopy.headers).forEach((header) => {
380+
if (cachedCopy.headers[header]) {
381381
if (environment.cache.serverSide.debug) {
382382
console.log(`Restore cached ${header} header`);
383383
}
384-
res.setHeader(header, cachedCopy.headers[header.toLowerCase()]);
384+
res.setHeader(header, cachedCopy.headers[header]);
385385
}
386386
});
387387
}
@@ -462,8 +462,8 @@ function saveToCache(req, page: any) {
462462
// Avoid caching "/reload/[random]" paths (these are hard refreshes after logout)
463463
if (key.startsWith('/reload')) { return; }
464464

465-
// Retrieve response headers
466-
const headers = req.res.getHeaders();
465+
// Retrieve response headers to save, if any
466+
const headers = retrieveHeaders(req.res);
467467
// If bot cache is enabled, save it to that cache if it doesn't exist or is expired
468468
// (NOTE: has() will return false if page is expired in cache)
469469
if (botCacheEnabled() && !botCache.has(key)) {
@@ -479,6 +479,21 @@ function saveToCache(req, page: any) {
479479
}
480480
}
481481

482+
function retrieveHeaders(response) {
483+
const headers = Object.create({});
484+
if (Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) {
485+
environment.cache.serverSide.headers.forEach((header) => {
486+
if (response.hasHeader(header)) {
487+
if (environment.cache.serverSide.debug) {
488+
console.log(`Save ${header} header to cache`);
489+
}
490+
headers[header] = response.getHeader(header);
491+
}
492+
});
493+
}
494+
495+
return headers;
496+
}
482497
/**
483498
* Whether a user is authenticated or not
484499
*/

src/config/cache-config.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export interface CacheConfig extends Config {
1313
serverSide: {
1414
// Debug server-side caching. Set to true to see cache hits/misses/refreshes in console logs.
1515
debug: boolean,
16-
// List of headers to restore from the cache hit
16+
// List of response headers to save into the cache
1717
headers: string[],
1818
// Cache specific to known bots. Allows you to serve cached contents to bots only.
1919
botCache: {

src/environments/environment.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export const environment: BuildConfig = {
5959
// In-memory cache of server-side rendered pages. Disabled in test environment (max=0)
6060
serverSide: {
6161
debug: false,
62+
headers: ['Link'],
6263
botCache: {
6364
max: 0,
6465
timeToLive: 24 * 60 * 60 * 1000, // 1 day

0 commit comments

Comments
 (0)