【发布时间】:2019-10-16 16:16:46
【问题描述】:
考虑生成ico 图像的view:
from django.http import HttpResponse
from app.somewhere import Favicon
# View URL: `/<str:colour>.ico`
def favicon( request, colour ):
response = HttpResponse(
Favicon.render( colour ),
status=200
)
response['Content-Type'] = 'image/x-icon'
response['Cache-Control'] = 'public, max-age=31536000'
return response
Favicon.render() 返回一个有效的字节流,不要太在意。
这是我的 HTML 文档的 head 中的 link 元素:
<link rel=icon href=/7f9fa4.ico>
现在问题来了:为什么每次我重新加载页面时,我的浏览器 Chromium 73 都会向/7f9fa4.ico 发出请求,而不是从缓存中检索图标?如果我在新选项卡中打开/7f9fa4.ico,第一次向服务器发送请求,我的浏览器将进一步从缓存中检索图像;现在告诉我浏览器缓存系统出了什么问题。
这是一个请求(cookies和首选项被省略):
GET /7f9fa4.ico HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
Referer: http://localhost:8000/
这些是响应标头:
HTTP/1.1 200 OK
Date: Mon, 03 Jun 2019 07:03:58 GMT
Server: WSGIServer/0.2 CPython/3.6.8
Content-Type: image/x-icon
Cache-Control: public, max-age=31536000
X-Frame-Options: SAMEORIGIN
Content-Length: 196
控制台输出(如果有帮助的话):
[05/Jun/2019 09:17:42] "GET /7f9fa4.ico HTTP/1.1" 200 196
另外,如果我从head 中删除link 元素,每次我重新加载页面时,浏览器都会向/favicon.ico(在我的情况下只是镜像/ffffff.ico)发出请求,效果相同。
【问题讨论】:
-
请尝试在html中手动指定这个标签
<link rel="icon" type="image/x-icon" href="/7f9fa4.ico" />并写一个结果。 -
@SergeyMiletskiy 没有冒犯,但如果解决方案如此简单,我会自己做的。我试过了——没有结果。
-
无关个人,只是一个开发过程。 :) 我的下一个想法 - 你在调试模式下运行你的服务器,所以静态服务不同。尝试设置 DEBUG=False
-
@SergeyMiletskiy 仍然没有效果。
标签: django http caching browser-cache http-caching