If-Modified-Since vs If-None-Match

apache-2.2cache

This question is based on this article

response header

HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195

request header

GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"    
HTTP/1.1 304 Not Modified

In this case browser is sending both If-None-Match and If-Modified-Since. My question is on the server side do I need to match BOTH etag and If-Modified-Since before I send 304.

Or

Should I just look at etag and send 304 if etag is a match. In this case I am ignoring If-Modified-Since .

Best Answer

Excerpt from RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1"

13.3.4 Rules for When to Use Entity Tags and Last-Modified Dates

...

An HTTP/1.1 origin server, upon receiving a conditional request that includes both a Last-Modified date (e.g., in an If-Modified-Since or If-Unmodified-Since header field) and one or more entity tags (e.g., in an If-Match, If-None-Match, or If-Range header field) as cache validators, MUST NOT return a response status of 304 (Not Modified) unless doing so is consistent with all of the conditional header fields in the request.