Bird
Raised Fist0
Node.jsframework~5 mins

HTTP caching headers in Node.js

Choose your learning style10 modes available
Introduction

HTTP caching headers help browsers and servers save copies of files. This makes websites load faster and reduces internet data use.

When you want your website images to load quickly for returning visitors.
When you want to reduce server load by letting browsers reuse files.
When you want to control how long browsers keep a copy of your webpage.
When you want to make sure users see updated content after changes.
When building APIs that return data which can be cached for some time.
Syntax
Node.js
res.setHeader('Cache-Control', 'public, max-age=3600')

Cache-Control is the main header to control caching behavior.

Use max-age to set how many seconds the file stays fresh.

Examples
This tells browsers to always check with the server before using a cached copy.
Node.js
res.setHeader('Cache-Control', 'no-cache')
This allows caching for 24 hours and lets any cache store the response.
Node.js
res.setHeader('Cache-Control', 'public, max-age=86400')
This caches the response only in the user's browser for 1 hour, not shared caches.
Node.js
res.setHeader('Cache-Control', 'private, max-age=3600')
This tells browsers and caches not to store the response at all.
Node.js
res.setHeader('Cache-Control', 'no-store')
Sample Program

This Node.js server sends a simple HTML page with a caching header that tells browsers to keep the page for 10 seconds before checking again.

Node.js
import http from 'node:http';

const server = http.createServer((req, res) => {
  if (req.url === '/') {
    res.setHeader('Content-Type', 'text/html');
    res.setHeader('Cache-Control', 'public, max-age=10');
    res.end('<h1>Hello, caching!</h1>');
  } else {
    res.statusCode = 404;
    res.end('Not Found');
  }
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});
OutputSuccess
Important Notes

Setting caching headers properly improves website speed and reduces server work.

Use no-cache if content changes often and must be fresh.

Remember to test caching behavior using browser DevTools Network tab.

Summary

HTTP caching headers tell browsers how long to keep files.

Use Cache-Control with options like max-age, no-cache, and no-store.

Proper caching makes websites faster and saves data.

Practice

(1/5)
1. What does the Cache-Control: max-age=3600 header instruct the browser to do?
easy
A. Cache the response for 3600 seconds before checking for updates
B. Never cache the response
C. Cache the response indefinitely
D. Only cache the response if the user is offline

Solution

  1. Step 1: Understand the max-age directive meaning

    The max-age directive tells the browser how many seconds it can keep the cached response before it must revalidate.
  2. Step 2: Interpret max-age=3600

    max-age=3600 means the browser should cache the response for 3600 seconds (1 hour) before checking for a new version.
  3. Final Answer:

    Cache the response for 3600 seconds before checking for updates -> Option A
  4. Quick Check:

    max-age=3600 = Cache 1 hour [OK]
Hint: max-age sets cache time in seconds [OK]
Common Mistakes:
  • Confusing max-age with no-cache
  • Thinking max-age means no caching
  • Assuming max-age caches forever
2. Which of the following is the correct way to set a no-store cache control header in a Node.js HTTP response?
easy
A. res.header('Cache-Control', 'no-store')
B. res.setHeader('Cache-Control', 'no-store')
C. res.set('Cache-Control', 'no-store')
D. res.cacheControl = 'no-store'

Solution

  1. Step 1: Recall Node.js HTTP response header syntax

    In Node.js, the method to set headers is res.setHeader(name, value).
  2. Step 2: Match the correct method and header

    res.setHeader('Cache-Control', 'no-store') uses res.setHeader('Cache-Control', 'no-store'), which is the correct syntax to set the no-store directive.
  3. Final Answer:

    res.setHeader('Cache-Control', 'no-store') -> Option B
  4. Quick Check:

    Use res.setHeader() to set headers [OK]
Hint: Use res.setHeader() to set HTTP headers [OK]
Common Mistakes:
  • Using incorrect method names like res.set or res.header
  • Assigning header as a property instead of using setHeader
  • Confusing Express methods with Node.js core methods
3. Consider this Node.js code snippet setting caching headers:
res.setHeader('Cache-Control', 'no-cache, max-age=0');
res.end('Hello');
What will the browser do with this response?
medium
A. Ignore caching and always fetch fresh data
B. Cache the response for 0 seconds and never revalidate
C. Cache the response indefinitely without revalidation
D. Cache the response for 0 seconds and revalidate before each use

Solution

  1. Step 1: Understand the meaning of no-cache and max-age=0

    The no-cache directive means the browser must revalidate with the server before using the cached response. max-age=0 means the cached response is immediately stale.
  2. Step 2: Combine the effects

    With no-cache and max-age=0, the browser caches the response but must check with the server before each use, effectively caching for 0 seconds without skipping validation.
  3. Final Answer:

    Cache the response for 0 seconds and revalidate before each use -> Option D
  4. Quick Check:

    no-cache + max-age=0 = revalidate every time [OK]
Hint: no-cache means revalidate before use [OK]
Common Mistakes:
  • Thinking no-cache means no caching at all
  • Ignoring max-age=0 effect
  • Assuming browser ignores these headers
4. You wrote this Node.js code to prevent caching:
res.end('Data');
res.setHeader('Cache-Control', 'no-cache, no-store');
But the browser still caches the response. What is the likely mistake?
medium
A. The 'no-store' directive is misspelled
B. The response status code is missing
C. Headers are set after sending the response body
D. The Cache-Control header should be lowercase

Solution

  1. Step 1: Check header setting timing

    Headers must be set before sending the response body. If headers are set after calling res.end(), they won't be sent.
  2. Step 2: Confirm header spelling and case

    Cache-Control is case-insensitive and 'no-store' is spelled correctly, so these are not issues.
  3. Step 3: Status code is optional for caching headers

    Missing status code does not cause caching issues here.
  4. Final Answer:

    Headers are set after sending the response body -> Option C
  5. Quick Check:

    Set headers before res.end() [OK]
Hint: Set headers before sending response body [OK]
Common Mistakes:
  • Setting headers after res.end()
  • Misspelling cache directives
  • Assuming header case matters
5. You want to serve a JSON API response that should never be cached by browsers or proxies. Which combination of HTTP caching headers in Node.js ensures this behavior?
hard
A. res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate')
B. res.setHeader('Cache-Control', 'max-age=3600')
C. res.setHeader('Cache-Control', 'public, max-age=86400')
D. res.setHeader('Cache-Control', 'private, max-age=0')

Solution

  1. Step 1: Understand no-store and no-cache directives

    no-store prevents any caching anywhere. no-cache forces revalidation. must-revalidate requires caches to obey freshness rules strictly.
  2. Step 2: Analyze each option

    res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate') combines all directives to prevent caching fully. res.setHeader('Cache-Control', 'max-age=3600') and C allow caching. res.setHeader('Cache-Control', 'private, max-age=0') allows private caching but with max-age=0, which still permits revalidation.
  3. Final Answer:

    res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate') -> Option A
  4. Quick Check:

    no-store + no-cache = no caching [OK]
Hint: Use no-store to fully prevent caching [OK]
Common Mistakes:
  • Using max-age allowing caching
  • Confusing private with no-store
  • Omitting must-revalidate for strictness
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard