Many developers have experienced a strange phenomenon: when you curl
a URL, you get a cache HIT or the expected content, but when opening the same URL in a browser, the page behaves differently, takes longer to load, or even shows a cache MISS. Let’s break down why this happens.
1. HTTP Requests Aren’t the Same
Even though both curl
and browsers send HTTP requests, there are key differences in headers that can change how the server or CDN responds.
Common Differences:
Header | Browser | curl (default) | Effect |
---|---|---|---|
User-Agent |
Sent automatically by the browser (e.g., Chrome, Firefox) | curl default (curl/8.3 ) |
Some servers respond differently based on user-agent (mobile vs desktop, modern vs legacy). |
Accept-Encoding |
Usually gzip, br, deflate
|
None unless specified | Servers may compress content differently or bypass cache. |
Cookies |
Browser sends cookies stored for the site | None unless manually set | Session-based content may differ. |
Referer |
Automatically sent by browsers | None | Can affect caching, analytics, and redirects. |
Cache-Control |
Browser may send max-age=0 on reload |
None | Forces server/CDN to bypass cache. |
2. How CDNs Treat Requests Differently
Content Delivery Networks like CloudFront cache responses based on request headers.
- If a browser sends extra headers (cookies, certain encodings, user-agent), CloudFront may treat it as a unique request → cache MISS.
-
curl
with minimal headers hits the cached version → cache HIT.
Example:
curl -I https://example.com/page
# Might return X-Cache: HIT
Open in browser
# X-Cache: MISS
3. Debugging Browser vs Curl Differences
1 Inspect Headers:
- Use browser dev tools (Network tab) to see headers sent by the browser.
- Use
curl -v
to see headers sent by curl.
2 Replicate Browser Request with Curl:
curl -H "User-Agent: <browser-ua-string>" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Cookie: <your-cookies>" \
https://example.com
3 Check Cache Behavior:
- Observe
X-Cache
orCF-Cache-Status
headers from CloudFront or other CDNs.
4. Takeaways
- HTTP requests are not uniform; headers matter.
- CDNs may cache multiple versions of the same URL depending on headers.
- To debug cache issues, always compare browser and command-line requests.
- Minimal header forwarding policies in CDNs can reduce unnecessary cache misses.
If you’ve ever struggled with repetitive tasks, obscure commands, or debugging headaches, this platform is here to make your life easier. It’s free, open-source, and built with developers in mind.
👉 Explore the tools: FreeDevTools
👉 Star the repo: freedevtools
Top comments (0)