文件下载服务器返回304导致的异常
程序员文章站
2022-07-13 17:14:36
...
自己写了个存储服务代理服务,做了些权限验证等工作。
代理使用了腾讯云cos存储,客户端发起下载文件的请求,代理服务则会对cos存储发起一个http调用,
返回200,则认为调用成功。
后来客户端提出了支持断点续传需求,于是需要解析header中的range字段,并提交给cos存储(实际上将大部分header都透传给cos了);并将cos返回的206码,大部分header及字节流返回给客户端。代码发布后使用很顺利,没有任何异常。
后这个存储服务,提供了api给浏览器使用,时不时的报出了500异常,挺频繁。查日志原来是cos存储返回了304码,我们代码认为这是个错误。
HTTP 304: Not Modified
304码表示内容没有变化,但是以前的调用都是返回200, 304是如何出来的呢?
经过一番推测,最有可能的就是因为请求中header的变化,于是仔细辨认header。。。发现
主要是由两个字段引起的:
- etag
- if-none-match
字段解析可以参考:https://blog.csdn.net/spring21st/article/details/5837953
解决方法:
一:将相关etag,last-modified过滤掉,但这种方法比较粗暴,而且没有有效利用缓存机制。
二:认为304也是成功返回,并将相关heade和空body一并返回客户端,这个方法更合适些
上一篇: C3P0属性设置和数据库连接池的获取
推荐阅读