欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件下载服务器返回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一并返回客户端,这个方法更合适些

 

 

相关标签: 304