无法加载最新图片
工作中上传后重新加载头像的时候,发现头像并没有改变。这个问题以前也遇到过,这次不能忍了必须查个水落石出。
SDWebImage options设置为:SDWebImageRefreshCached,但是并没有效果。
汇总资料后:
使用
curl url --head
例如:
curl http://123.126.109.38:18081/AreaAppFile/nurse_head_thumb/402887bb62f58c250162f5bf4a840006.jpg --head
返回:
curl http://123.126.109.38:18081/AreaAppFile/nurse_head_thumb/402887bb62f58c250162f5bf4a840006.jpg --head
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"48681-1525950947149"
Last-Modified: Thu, 10 May 2018 11:15:47 GMT
Content-Type: image/jpeg
Content-Length: 48681
Date: Thu, 10 May 2018 11:16:31 GMT
对比抖音头像链接:
curl https://p1.pstatp.com/aweme/100x100/729c00380329e728f710.jpeg --head
HTTP/1.1 200 OK
Expires: Thu, 18 Apr 2019 06:10:07 GMT
Date: Wed, 18 Apr 2018 06:10:07 GMT
Server: nginx
Content-Type: image/jpeg
Content-Length: 2689
Accept-Ranges: bytes
Cache-Control: max-age=31536000
Last-Modified: Tue, 27 Mar 2018 15:18:20 GMT
X-Mosaic-Namespace: aweme-online
X-Response-Date: Tue, 27 Mar 2018 15:22:24 GMT
X-Xxoo-Time: Tue, 27 Mar 2018 15:22:24 GMT
Access-Control-Allow-Origin: *
Age: 1
X-Via: 1.1 lf163:4 (Cdn Cache Server V2.0), 1.1 menxiazai39:3 (Cdn Cache Server V2.0), 1.1 fangwangtong49:4 (Cdn Cache Server V2.0)
Connection: keep-alive
X-Dscp-Value: 0
> 对比发现没有Cache-Control: 字段
#### 好奇Cache-Control:如何实现图片验证,资料如下
客户端从服务器请求数据经历如下基本步骤:
1. 如果请求命中本地缓存则从本地缓存中获取一个对应资源的"copy";
2. 检查这个"copy"是否fresh,是则直接返回,否则继续向服务器转发请求。
3. 服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。
4. 客户端更新本地缓存。
* no-cache的作用是:强制客户端跳过步骤2,直接向服务器发送请求。也就是说每次请求都必须向服务器发送。
* must-revalidate:作用与no-cache相同,但更严格,强制意味更明显。但这只是理论上的描述,根据我在ff6上的测试,它几乎不起作用:只要请求的频率加快到一定程度,服务器就接收不到请求。
* no-store:缓存将不存储response,包括header和body。测试结果表明,除每次请求都必发送到服务器外,响应代码均是200,且request并没有发送"If-Modified-Since"和"If-None-Match"头,这意味着缓存的确没有存储response。
以上三者都是要求客户端每次请求都必须到服务器进行revalidate,此功能还可以通过max-age实现:
Cache-Control:max-age=0
测试结果证明了这一点,每次都请求了服务器,且状态码是304。
明天让服务端增加该值,再试试看。