请考虑以下渲染ico
图像的视图,其中Favicon.render
返回一个简单的PIL
图像:
from django.http import HttpResponse
from io import BytesIO
from somewhere import Favicon
# View URL: `/favicon.<str:colour>.ico`
def favicon( request, colour ):
bs = BytesIO()
Favicon.render( colour ).save( bs, 'ICO' )
response = HttpResponse( bs, status=200 )
response['Content-Type'] = 'image/x-icon'
response['Cache-Control'] = 'public, max-age=31536000'
return response
这是我的HTML文档开头的link
:
<link rel=icon href=/favicon.7f9fa4.ico>
为什么每次我重新加载页面时,浏览器(Chromium 73.0.3683.86)都会向/favicon.7f9fa4.ico
发送请求,而不是检索缓存的图像?
如何使浏览器始终从缓存中检索图标而不是向服务器发出请求?
我使用默认的Django WSGI服务器。
答案 0 :(得分:3)
您可能会发现正在发出此请求来验证缓存的内容。我注意到您发送到服务器的请求有Cache-Control: no-cache
和Pragma: no-cache
。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#Cacheability
无缓存 强制缓存在释放缓存的副本之前将请求提交到原始服务器进行验证。
因此,它会强制缓存提交验证请求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Pragma#Directives
无缓存 与Cache-Control相同:无缓存。强制缓存在释放缓存的副本之前将请求提交到原始服务器进行验证。
这些状态表示浏览器应在使用缓存图标之前向服务器发送“验证”请求。