Yes, 200 vs 304 status codes always depend on whether the resource has "expired". You are correct, a status code of 200 means from the cache - no HTTP request was made - that's why you see From Memory Cache in DevTools. A status code of 304 means the cache entry had expired and the browser had no choice but to make a HTTP request to ask server if any changes have been made. The server returning a status code of 304 is a way of it telling the browser that it does not need to download a new version of the resource and it can keep using the same cache entry.
More: What is the difference between HTTP status code 200 (cache) vs status code 304?
Each resource has its own timeout value so it is possible that some
will expire while others will not. You should check the HTTP responses in DevTool -- in the Network tab, click a request and on the right-hand side, click Response. You can see the expiry values the server gave to the browser. Check if the resources have different max-age
, or if they have different last-modified
. I'm sure that in this case, it does not matter that the jpg was in a CSS file.