Web浏览器工作原理
浏览器缓存机制
重要程度:6 分
<h2>浏览器缓存机制</h2>
<p>浏览器缓存是为了提高网页加载速度和减少服务器负载而设计的一种机制。</p>
<ul>
<li><strong>缓存类型:</strong>
<ul>
<li><strong>强缓存:</strong>通过HTTP头信息中的Cache-Control和Expires字段控制。当请求资源时,如果在缓存中找到未过期的资源,则直接从缓存中读取,不向服务器发送请求。
<ul>
<li>Cache-Control: max-age=3600 表示资源可以在缓存中保留1小时。</li>
</ul>
</li>
<li><strong>协商缓存:</strong>通过HTTP头信息中的Last-Modified/If-Modified-Since和ETag/If-None-Match字段控制。当请求资源时,如果缓存中有资源但不确定是否过期,则会向服务器发送请求验证资源是否发生变化。
<ul>
<li>Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT 表示资源最后修改时间为2015年10月21日7点28分。</li>
<li>ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" 是一个资源的唯一标识符。</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>例题</h3>
<p>假设有一个HTML文件,其HTTP响应头如下:</p>
<pre>
HTTP/1.1 200 OK
Date: Wed, 21 Oct 2015 07:28:00 GMT
Cache-Control: max-age=3600
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
</pre>
<p>当用户第一次访问此HTML文件时,浏览器会从服务器获取最新的HTML内容并存储在缓存中。此后,若在接下来的一小时内再次访问此文件,浏览器将检查缓存中的内容是否过期,发现未过期则直接使用缓存中的内容,不会向服务器发送请求。</p>
<pre>
GET /index.html HTTP/1.1
Host: www.example.com
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
</pre>
<p>如果用户在这一小时内再次请求该文件,浏览器会向服务器发送带有If-None-Match头部的请求,服务器会检查资源是否有变化,如果没有变化,则返回304状态码,表示资源未更改,浏览器可以直接使用缓存中的内容。</p>