Conditional GET Requests
If the browser has a copy of the component in its cache, but isn't sure whether it's still valid, a conditional GET request is made. If the cached copy is still valid, the browser uses the copy from its cache, resulting in a smaller response and a faster user experience.
Typically, the validity of the cached copy is derived from the
date it was last modified. The browser knows when the component was last
modified based on the Last-Modified
header in the response (refer to the previous sample responses). It uses
the If-Modified-Since
header to send
the last modified date back to the server. The browser is essentially
saying, "I have a version of this resource with the following last
modified date. May I just use it?"
GET /us.js.yimg.com/lib/common/utils/2/yahoo_2.0.0-b2.js HTTP/1.1 Host: us.js2.yimg.com User-Agent: Mozilla/5.0 (...) Gecko/20061206 Firefox/1.5.0.9 Accept-Encoding: gzip,deflate If-Modified-Since: Wed, 22 Feb 2006 04:15:54 GMT
HTTP/1.1 304 Not Modified Content-Type: application/x-javascript Last-Modified: Wed, 22 Feb 2006 04:15:54 GM
If the component has not been modified since the specified date,
the server returns a "304 Not Modified" status code and skips sending
the body of the response, resulting in a smaller and faster response. In
HTTP/1.1 the ETag
and If-None-Match
headers are another way to make
conditional GET requests. Both approaches are discussed in Chapter 15.
Get High Performance Web Sites now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.