Bird
Raised Fist0
Nginxdevops~5 mins

Cache-Control headers in Nginx - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the purpose of the Cache-Control header in HTTP?
The Cache-Control header tells browsers and other clients how to store and reuse responses to speed up loading times and reduce server load.
Click to reveal answer
beginner
What does the Cache-Control directive no-cache mean?
It means the client must check with the server before using a cached copy, ensuring the content is fresh.
Click to reveal answer
beginner
How do you set Cache-Control headers in nginx configuration?
Use the add_header Cache-Control "value"; directive inside a server or location block.
Click to reveal answer
beginner
What does the Cache-Control directive max-age=3600 do?
It tells the client to keep the cached response for 3600 seconds (1 hour) before checking for a new version.
Click to reveal answer
intermediate
What is the difference between no-store and no-cache in Cache-Control?
no-store means do not save the response anywhere, while no-cache means save but always revalidate before use.
Click to reveal answer
Which Cache-Control directive tells the browser to store the response but always check with the server before using it?
Apublic
Bno-store
Cmax-age=3600
Dno-cache
How do you add a Cache-Control header in nginx?
Aadd_header Cache-Control "max-age=3600";
Bcache_control max-age=3600;
Cset_header Cache-Control max-age=3600;
Dcache-control add max-age=3600;
What does the Cache-Control directive public mean?
AThe response cannot be cached.
BThe response can be cached by any cache, even shared ones.
CThe response is private to the user.
DThe response must be revalidated every time.
If you want to prevent any caching of a response, which directive should you use?
Ano-store
Bmax-age=0
Cpublic
Dmust-revalidate
What happens if you set max-age=0 in Cache-Control?
AThe response is cached forever.
BThe response is cached for 0 seconds and then deleted.
CThe cached response is considered stale immediately and must be revalidated.
DThe response is never cached.
Explain how Cache-Control headers affect browser caching behavior and why they are important in nginx configurations.
Think about how browsers decide to reuse or refresh content.
You got /4 concepts.
    Describe the difference between the Cache-Control directives no-cache and no-store with examples of when to use each.
    Focus on whether the response is saved or not.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the purpose of the Cache-Control header in nginx?
      easy
      A. To set the server's IP address
      B. To configure SSL certificates
      C. To tell browsers how to cache files
      D. To define the server's hostname

      Solution

      1. Step 1: Understand HTTP headers role

        HTTP headers communicate instructions between server and browser.
      2. Step 2: Identify Cache-Control header function

        Cache-Control tells browsers how and when to cache content.
      3. Final Answer:

        To tell browsers how to cache files -> Option C
      4. Quick Check:

        Cache-Control = caching instructions [OK]
      Hint: Cache-Control controls browser caching behavior [OK]
      Common Mistakes:
      • Confusing Cache-Control with server IP settings
      • Thinking Cache-Control manages SSL
      • Mixing Cache-Control with hostname configuration
      2. Which is the correct nginx directive to add a Cache-Control header that caches content for 1 hour?
      easy
      A. add_header Cache-Control "max-age=3600";
      B. cache_control add "max-age=3600";
      C. set_header Cache-Control "max-age=3600";
      D. header_add Cache-Control "max-age=3600";

      Solution

      1. Step 1: Recall nginx syntax for headers

        nginx uses add_header directive to add HTTP headers.
      2. Step 2: Match correct syntax for Cache-Control

        The correct syntax is add_header Cache-Control "max-age=3600"; to set caching for 3600 seconds (1 hour).
      3. Final Answer:

        add_header Cache-Control "max-age=3600"; -> Option A
      4. Quick Check:

        add_header + Cache-Control + max-age=3600 = correct [OK]
      Hint: Use add_header directive for Cache-Control in nginx [OK]
      Common Mistakes:
      • Using incorrect directive names like set_header
      • Wrong order of words in directive
      • Missing quotes around header value
      3. Given this nginx config snippet:
      location /images/ {
        add_header Cache-Control "public, max-age=86400";
      }
      What will the Cache-Control header instruct browsers for requests to /images/logo.png?
      medium
      A. Do not cache the image
      B. Cache the image for 1 day and allow shared caches
      C. Cache the image only privately for 1 hour
      D. Cache the image forever without expiration

      Solution

      1. Step 1: Analyze Cache-Control directives

        "public" means cache is allowed by browsers and shared caches. "max-age=86400" means cache for 86400 seconds (1 day).
      2. Step 2: Apply to /images/logo.png request

        Requests to /images/ get this header, so browsers and proxies cache the image for 1 day.
      3. Final Answer:

        Cache the image for 1 day and allow shared caches -> Option B
      4. Quick Check:

        public + max-age=86400 = 1 day shared cache [OK]
      Hint: "public" + max-age seconds means shared cache allowed [OK]
      Common Mistakes:
      • Thinking "public" disables caching
      • Confusing max-age seconds with hours
      • Assuming private caching only
      4. You added this line in nginx config:
      add_header Cache-Control "max-age=3600";
      But browsers still cache content longer than 1 hour. What is the likely problem?
      medium
      A. Cache-Control header is ignored by browsers
      B. The max-age value is too low
      C. You need to restart nginx for add_header to work
      D. The add_header directive is inside a location block but response code is 304

      Solution

      1. Step 1: Understand add_header behavior with response codes

        By default, nginx does not add headers with add_header on 304 Not Modified responses.
      2. Step 2: Identify why caching is longer

        If response is 304, Cache-Control header may be missing, causing browsers to use old cache rules.
      3. Final Answer:

        The add_header directive is inside a location block but response code is 304 -> Option D
      4. Quick Check:

        add_header skips 304 responses by default [OK]
      Hint: add_header skips 304 responses unless configured [OK]
      Common Mistakes:
      • Assuming max-age value controls server cache
      • Thinking browsers ignore Cache-Control
      • Believing nginx restart fixes header issues
      5. You want to configure nginx to prevent caching of API JSON responses but allow caching of static CSS files for 7 days. Which configuration is correct?
      hard
      A. location /api/ { add_header Cache-Control "no-store, no-cache, must-revalidate"; } location /css/ { add_header Cache-Control "public, max-age=604800"; }
      B. location /api/ { add_header Cache-Control "max-age=604800"; } location /css/ { add_header Cache-Control "no-cache"; }
      C. location /api/ { add_header Cache-Control "public, max-age=0"; } location /css/ { add_header Cache-Control "private, max-age=604800"; }
      D. location /api/ { add_header Cache-Control "max-age=0"; } location /css/ { add_header Cache-Control "no-store"; }

      Solution

      1. Step 1: Prevent caching for API JSON responses

        Using "no-store, no-cache, must-revalidate" ensures browsers do not cache API responses.
      2. Step 2: Allow caching for CSS files for 7 days

        "public, max-age=604800" allows shared caches and browsers to cache CSS for 604800 seconds (7 days).
      3. Final Answer:

        location /api/ { add_header Cache-Control "no-store, no-cache, must-revalidate"; } location /css/ { add_header Cache-Control "public, max-age=604800"; } -> Option A
      4. Quick Check:

        no-cache API + public 7-day CSS = correct config [OK]
      Hint: Use no-cache for API, public max-age for static files [OK]
      Common Mistakes:
      • Mixing cache directives for API and static files
      • Using private instead of public for CSS caching
      • Setting max-age=0 for static files incorrectly