<div dir="ltr"><div style="font-size:small;color:rgb(51,51,153)" class="gmail_default">From what I understand, 304 answers should not try to modify headers, as the cache having made the conditional request to check the correctness of its entry will not necessarily update it: <a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5">https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5</a>.<br></div><div style="font-size:small;color:rgb(51,51,153)" class="gmail_default">The last sentence sums it all: '<i><b>If</b></i> a cache uses a received 304 response to update a cache entry, [...]'<br></div><div class="gmail_extra"><div><div class="gmail_signature"><font size="1"><span style="color:rgb(102,102,102)">---<br></span><b><span style="color:rgb(102,102,102)">B. R.</span></b><span style="color:rgb(102,102,102)"></span></font></div></div>
<br><div class="gmail_quote">On Sun, Sep 11, 2016 at 12:56 PM, jchannon <span dir="ltr"><<a target="_blank" href="mailto:nginx-forum@forum.nginx.org">nginx-forum@forum.nginx.org</a>></span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">I have nginx and its cache working as expected apart from one minor issue.<br>
When a request is made for the first time it hits the origin server, returns<br>
a 200 and nginx caches that response. If I make another request I can see<br>
from the X-Cache-Status header that the cache has been hit. When I wait a<br>
while knowing the cache will have expired I can see nginx hit my origin<br>
server doing a conditional GET because I have proxy_cache_revalidate on;<br>
defined.<br>
<br>
When I check if the resource has changed in my app on the origin server I<br>
see it hasn't and return a 304 with a new Expires header. Some may argue why<br>
are you returning a new Expires header if the origin server says nothing has<br>
changed and you are returning 304. The answer is, the HTTP RFC says that<br>
this can be done <a target="_blank" rel="noreferrer" href="https://tools.ietf.org/html/rfc7234#section-4.3.4">https://tools.ietf.org/html/<wbr>rfc7234#section-4.3.4</a><br>
<br>
One thing I have noticed, no matter what headers are I add or modify, when<br>
the origin server returns 304 nginx will give a response with the first set<br>
of response headers it saw for that resource.<br>
<br>
Also if I change the Cache-Control:max-age header value from the first<br>
request when I return the 304 response it appears nginx obeys the new value<br>
as my resource is cached for that time however the response header value is<br>
that of what was given on the first request not the value that I modified on<br>
the 304 response.   This applies to all subsequent requests if the origin<br>
server issues a 304.<br>
<br>
I am running nginx version: nginx/1.10.1<br>
<br>
Posted at Nginx Forum: <a target="_blank" rel="noreferrer" href="https://forum.nginx.org/read.php?2,269457,269457#msg-269457">https://forum.nginx.org/read.<wbr>php?2,269457,269457#msg-269457</a><br>
<br>
______________________________<wbr>_________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a target="_blank" rel="noreferrer" href="http://mailman.nginx.org/mailman/listinfo/nginx">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx</a><br>
</blockquote></div><br></div></div>