客户端第一次向服务器成功发送请求,服务器会把内容正确返回给客户端,状态码是200,并会标记内容修改时间,和一个etag标记用来核实内容是否修改过,等下次同一客户端再次发送请求,会根据请求标记的修改时间,etag来判断文件内容在这期间是否修改过,如果没有修改过则返回304状态码,客户端直接加载Web缓存内容,如果文件内容修改过则把最新内容返回给客户端,并返回最新文件修改时间,etag标记。
参考如下事例,客户端第一次访问一个图片,请求成功,服务器返回200状态码,response响应包里会包含文件最近修改时间last-modified,和etag标记,服务器返回的HTTP响应头中,ETag 值为 "80D21DDC3B90400B1E034989EB01DDB8",Last-Modified 值为 Fri, 18 Sep 2015 14:19:54 GMT,用于下次请求时的缓存验证。完整HTTP头信息如下。
Response Headers
Accept-Ranges: bytes
Age: 48
Connection: keep-alive
Content-Length: 133457
Content-Type: image/jpeg
Date: Wed, 23 Sep 2015 13:42:09 GMT
ETag: "80D21DDC3B90400B1E034989EB01DDB8"
Last-Modified: Fri, 18 Sep 2015 14:19:54 GMT
Server: Tengine
Via: cache46.l2et2-1[193,200-0,H], cache31.l2et2-1[222,0], kunlun5.cn172[0,200-0,H], kunlun1.cn172
X-Cache: HIT TCP_MEM_HIT dirn:-2:-2
x-oss-object-type: Normal
x-oss-request-id: 5602AC302577840C337C0B2D
X-Swift-CacheTime: 86400
X-Swift-SaveTime: Wed, 23 Sep 2015 13:42:09 GMT
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Host: oss.aikuniu.com
Pragma: no-cache
当客户端再次访问时,会在请求头带上上次读取内容的修改时间和etag标记,服务器会根据etag和last-modified判断文档内容最近有没有修改过,如若没有则返回304状态码,如若修改过则把最新内容返回客户端,状态码则是200。客户端再次请求同一图片时,请求头携带 If-Modified-Since 和 If-None-Match,服务器比对后返回 304,具体报文如下:
Status Code: 304 Not Modified
Response Headers
Accept-Ranges: bytes
Age: 99
Connection: keep-alive
Content-Length: 0
Content-Type: image/jpeg
Date: Wed, 23 Sep 2015 13:42:09 GMT
ETag: "80D21DDC3B90400B1E034989EB01DDB8"
Last-Modified: Fri, 18 Sep 2015 14:19:54 GMT
Server: Tengine
Via: cache46.l2et2-1[193,200-0,H], cache31.l2et2-1[222,0], kunlun5.cn172[0,304-0,H], kunlun1.cn172[1,0]
X-Cache: HIT TCP_IMS_HIT dirn:-2:-2
x-oss-object-type: Normal
x-oss-request-id: 5602AC302577840C337C0B2D
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Host: oss.aikuniu.com
If-Modified-Since: Fri, 18 Sep 2015 14:19:54 GMT
If-None-Match: "80D21DDC3B90400B1E034989EB01DDB8"
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.
所以有时候服务器日志,或者CDN日志,OSS日志都会有304状态码,这个是正常的,说明Web缓存已经有这些内容了,并且在这期间这些内容并没有修改过,如果想更新Web缓存,可以按ctrl+F5页面,客户端会清除本地Web缓存从服务器发送请求,服务器则返回请求内容,并且状态码是200。
如问题还未解决,请联系售后技术支持。