Browser caching is completely different. The cached content is stored locally in the browser, but the content is generated by the web server. It is impossible for any party to complete this system process independently, so there must be a kind of system between them. Communication mechanism, this is the "cache negotiation" in http.
Let’s first look at a common http request:
host www.bkjia.com
user-agent mozilla/5.0 (windows; u; windows nt 6.1; zh-cn; rv:1.9.2.9) gecko/20100824 firefox/3.6.9 firephp tutorial/0.4
accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language zh-cn ,zh;q=0.5
accept-encoding use using
The above is an ordinary http request. In order to achieve browser cache control, we need to understand the four tags in the http response header:
last-modified: the last modified gmt time
etag: through a string Encoding to mark whether the content has changed
expires: Specify an expiration gmt time
cache-control: mag-age = expiration seconds relative to the browser local (can avoid the same effect when the server time is incorrect) )
Status code returned by http:
200 - Request successful
400 - Error request, such as syntax error
500 - The server generated an internal error
501 - The server does not support the requested function
The following code uses the above four methods to control the browser content caching for an hour. If after one hour It will immediately return a 304 status code to notify the browser to use local content. This will save server program execution time, network transmission time (only one header file is returned)
$modified_time = $_server['http_if_modified_since'];
header("http/1.1 304");
exit(0);
}
header("last-modified:" . gmdate("d, d m y h:i:s") . "gmt");
header("expires:" . gmdate("d, d m y h:i:s", time() + 3600) . "gmt");
header("cache-control: max-age=3600");
What needs special explanation is: expires requires the server provider to support the expires module. By default, the expires module will not be enabled. Just use the following command:
a2enmod expires //Enable expires module
We can also modify the http.conf configuration:
expiresactive on expiresbytype image/gif “access plus 1 month” expiresbytype text /css tutorial "now plus 2 day" expiresdefault "now plus 1 day"
The above is to set the expiration time for the mime type of static content, because we cannot directly specify an absolute expiration time for static files, so we use "access "plus" syntax, the web server dynamically calculates an absolute expiration time when the content is requested, as the expires marked content.
It is worth mentioning that for common static file formats, even if there is no expires tag in the http response header returned by the web server, the browser will guess an expiration time based on some other clues, such as IE in a certain cache mode , the gif image is set to never expire, unless we configure expires to expire immediately, that is, set the expiration time to the current time or 0.