Flask-send_from_directory-file-cache-setting
1.遇到的问题
在查看网站的站点地图时,sitemap.xml文件无法及时更新
源码为:
@app.route('/sitemap.xml')
def sitemap():
return send_from_directory(app.static_folder, 'sitemap.xml')
2.解决过程
查看Nginx日志,发现有访问记录,但是Flask日志没有访问记录,推测是Nginx缓存了文件,再进一步研究 Responses Header。
ache-control: max-age=43200
cache-control: no-cache
content-length: 232
content-type: text/xml; charset=utf-8
date: Thu, 22 Jul 2021 13:34:46 GMT
etag: "1626957430.2692862-232-1924272348"
expires: Fri, 23 Jul 2021 01:34:46 GMT
last-modified: Thu, 22 Jul 2021 12:37:10 GMT
server: nginx
x-cache: HIT
应该要修改 Responses Header
参数
3.解决办法
这里主要修改Flask程序的 Responses Header
3.1解决办法一
send_from_directory
主要继承了send_file
方法,有如下参数
flask.send_file(filename_or_fp, add_etags=True,cache_timeout=None, conditional=False, last_modified=None)
add_etags | set to False to disable attaching of etags. |
---|---|
cache_timeout | the timeout in seconds for the headers. When None (default), this value is set by : meth:~Flask.get_send_file_max_age of: data:~flask.current_app . |
last_modified | set the Last-Modified header to this value, a : class:~datetime.datetime or timestamp. If a file was passed, this overrides its mtime. |
修改后:
@app.route('/sitemap.xml')
def sitemap():
return send_from_directory(app.static_folder, 'sitemap.xml',
cache_timeout=-1,add_etags=False,last_modified=None)
3.2解决办法二
使用make_response
方法:
@app.route('/sitemap.xml')
def sitemap():
res = make_response(open('static/sitemap.xml').read())
res.headers['content-type'] = 'text/xml; charset=utf-8'
return res
注意:Nginx缓存也要清理一次
最后修改: 2022-08-20T22:43:13
版权声明:署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
comment 评论