前言:最近写了一个文件下载的接口,我测试下能下载文件后就提交了到了生产,然后然后使用下载功能的小伙伴找到我说下载有bug,我明明修改了文件内容重新下载后还是以前的数据,吓得我赶紧去看代码,终于让我发现了问题。

一、基础框架

后端:python3.8 + flask + flask-restful

前端:vue

二、场景:有一个功能界面需要上传下载文件,且支持更改新的上传文件

文件上传:通过request.files 获取到文件流,os.makedirs创建文件存储目录, file.save(filepath)保存,另外保存一条文件上传记录,涵盖文件名,文件保存路径等等,貌似一切都ok

文件下载: 通过前端界面获取到当前记录的文件名,通过文件名查找文件信息,找到文件目录filepath

response = make_response(send_from_directory(filepath, fullflname, as_attachment=True))
获取到response对象,返回文件流

三、当修改新的上传文件为B时,点击下载 还是获取的之前文件A,清理浏览器缓存后,点击下载,文件为B,这才是正确的

四、经过一系列资料查询,得知,谷歌会对文件下载进行缓存的

解决方法: 在下载获取到response对象后,增加headers 设置 cache-controll = “no-store“

重新下载文件查看接口请求头发现问题已经解决了

五、Cache-Control详解

服务器标记资源有效期使用的头字段是“Cache-Control”,里面的值“max-age=43200”就是资源的有效时间,相当于告诉浏览器,“这个页面只能缓存 43200秒,之后就算是过期,不能用。
no-cache — 强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以和public结合使用),或者严格要求使用最新数据 的应用(不惜牺牲使用缓存的所有好处)。
Pragma 当”no-cache”出现在请求消息中时,应用程序应当向原始服务器推送此请求,即使它已经在上次请求时已经缓存了一份拷贝。这样将保证客户端能接收到最权威的回应。它也用来在客户端发现其缓存中拷贝不可用或过期时,对拷贝进行强制刷新。
max-age>0:直接从游览器缓存中 提取。
max-age<=0:向server 发送http 请求确认 ,该资源是否有修改,有的话 返回200 ,无的话 返回304。

谷歌浏览器文件下载了缓存的问题与解决方案相关推荐

  1. 缓存HA的开源解决方案

    缓存HA的开源解决方案 1) Twitter的Redis/Memcached代理服务:Twemproxy 2) Facebook的Memcached协议路由器:McRouter 3) Youtube的 ...

  2. Java面试题:缓存三大问题及解决方案!

    Java面试少不了一些技术类型的笔试题,面试过程中很多小伙伴可能表达很好,结果Java基础不是很牢固,所以今天针对Java笔试题,小编汇总来一下Java的面试题缓存三大问题及解决方案. 1. Java ...

  3. 以ajax请求方式进行文件下载操作失败的原因及解决方案

    以ajax请求方式进行文件下载操作失败的原因及解决方案 参考文章: (1)以ajax请求方式进行文件下载操作失败的原因及解决方案 (2)https://www.cnblogs.com/sjshare/ ...

  4. Redis缓存穿透问题及解决方案

    Redis缓存穿透问题及解决方案 参考文章: (1)Redis缓存穿透问题及解决方案 (2)https://www.cnblogs.com/lingyejun/p/10087135.html 备忘一下 ...

  5. 面试常考!缓存三大问题及解决方案

    1. 缓存来由 随着互联网系统发展的逐步完善,提高系统的qps,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作从而造成系统瓶颈,极大的提升了用户体验和系统稳定性. 2. 缓存问题 ...

  6. 谷歌浏览器出现方格xp系统_win10系统谷歌浏览器扩展程序打不开的解决方案

    今天小编给大家分享win10系统谷歌浏览器扩展程序打不开的解决方案,"谷歌浏览器扩展程序"想必对于经常使用谷歌浏览器的用户一定不陌生,它能够对浏览器提供诸多的扩展的功能,但有很多用 ...

  7. 清除webBrowser 缓存和Cookie的解决方案

    清除webBrowser 缓存和Cookie的解决方案 通过测试webBrowser与IE缓存和Cookie都存放在Local Settings\Temporary Internet Files,我们 ...

  8. 缓存三大问题及解决方案

    1. 缓存来由 随着互联网系统发展的逐步完善,提高系统的qps,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作从而造成系统瓶颈,极大的提升了用户体验和系统稳定性. 2. 缓存问题 ...

  9. 使用Varnish代替Squid做网站缓存加速器的详细解决方案

    我曾经写过一篇文章──<初步试用Squid的替代产品──Varnish Cache网站加速器>,但当时仅仅是用着玩,没做深入研究. 今天写的这篇关于Varnish的文章,已经是一篇可以完全 ...

  10. redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案

    redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案 参考文章: (1)redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案 (2)https://www.cnblogs.com/shisuiliun ...

最新文章

  1. 机器人学习--机器人仿真环境汇总
  2. 代码设置Shape和Selector
  3. Hibernate 拦截器 Hibernate 监听器
  4. LetCode-MSSQL销售分析-I
  5. ksd文件怎么导入存档_DAY5-step5 Python 示例说明 ZIP 压缩文件
  6. 一图流“系列——Ruby vSphere Console命令脑图
  7. sql server分页_SQL Server中的分页简介
  8. 虚幻引擎自带的创建插件的插件
  9. oracle的一些学习
  10. sklearn实现lasso regression以及调参
  11. Java—图书管理系统
  12. ios 手游SDK 开发教程
  13. 天堂2芙蕾雅单机版mysql闪退_【图片】天堂2单机版-芙蕾雅。算是我这个老人对天堂2吧友的最后贡献吧!_天堂2吧_百度贴吧...
  14. 计算机重新启动后打印机脱机,重新启动计算机后打印机脱机怎么办
  15. 测试工程师如何规划自己的职业生涯
  16. VMware Workstation虚拟机备份及磁盘空间回收
  17. 【神经网络第三期】RBF神经网络基本原理和模型应用
  18. Java在编译到执行过程的编码问题
  19. 在android studio中制作九宫格图片
  20. 计算机弹奏两只老虎爱跳舞,原神风物之诗琴琴谱乐谱弹奏大全

热门文章

  1. Java 根据 Map 的 key 的 ASCII 码从小到大排序
  2. C#将集合key键以ASCII码从小到大排序
  3. 高频变压器漆包线规格的确定
  4. [华为] 华为交换机接口配置报错指南
  5. 关于XP系统远程桌面的一点点记录
  6. 数据结构课程设计-航空订票系统
  7. SQL查询是从Select开始的吗?
  8. BackTrack4——利用***测试保证系统安全
  9. swapidc卡密充值插件
  10. velocity语法教程