状态码200:请求已成功,请求所希望的响应头或数据体将随此响应返回,即返回的数据为全量的数据,如果文件不通过GZIP压缩的话,文件是多大,则要有多大传输量,出现此状态码是表示正常状态。
状态码304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。客户端和服务器端只需要传输很少的数据量来做文件的校验,如果文件没有修改过,则不需要返回全量的数据。
该响应必须包含以下的头信息:
Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么代理服务器以及客户端可以自行将 Date 字段添加到接收到的响应头中去(正如RFC 2068中规定的一样),缓存机制将会正常工作。
ETag 和/或 Content-Location,假如同样的请求本应返回200响应。
Expires, Cache-Control,和/或Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。
举例说明:
在一般情况下,浏览器在发请求前,缓存了某个文件,就先把自己缓存的文件信息放在请求头里,向服务器发起get请求
服务器收到请求后,在给浏览器发送响应前,对比一下这个文件信息,发现浏览器缓存的文件就是它,于是决定不发送整个文件内容,直接告诉浏览器 304 。
浏览器接收到 304 时,就知道原来我缓存的就是跟服务器端一样的文件,于是就直接拿本地缓存来用了。
如果服务器发现浏览器的缓存文件信息已经是旧的了,服务器就直接正常的发送文件内容,浏览器正常的接收文件内容