利用伪B站做测试的时候遇到304的一点小问题

来源:互联网 发布:进销存软件 知乎 编辑:程序博客网 时间:2024/05/14 04:48

用户先请求nws服务器,如果本地可以命中,nws直接返回文件给用户; 如果本地没有命中,nws回源向伪B站请求文件,就是简单的cdn的思路。

Created with Raphaël 2.1.0用户nws服务器 伪B站

作为一个做cdn的,用户永远之上。 用户要求怎么做,我们就怎么来。 基于这样的想法,我在测试nws是否可以正确的吐出伪B站给数据, 就算伪B站给nws的数据是错误的,不符合常规,nws也不能随便修改,也要原封不动的吐给用户。

测试遇到的问题

Cache-control: max-age=600, 针对伪B站304给nws过程中, 如果伪B站修改content-type值,nws不会做出处理,继续给客户端回复之前nws保存的content-type。 我当时就认为这不对啊,不按照用户的意思来了,违背客户意愿。

这个就是伪B站http头部信息
用户接受的http头部信息

当时用rfc文档看了,也没有查到304是什么标准啊,这样做行不行。

304 rfc文档

304大家都知道是文件内容没有修改就直接返回304了,但是如果我修改http会怎样没有查到,然后经过询问业务的同学,一般业务源站不会着做,而且304也不建议这么做,给我了另外一个文档。https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 然后找到了真相。

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers

翻译就是:如果条件GET使用了强大的缓存验证器,则响应不应该包括其他实体头。否则(即。,条件GET使用弱验证器),响应必须不包括其他实体头;这可以防止缓存实体和更新的标题之间的不一致

多BB两句http文档中的意思, MUST NOT 协议里面出现这个字样的, 表示强制要求。 违反该协议可能无法正常运行。 SHUOLD NOT 这个表示强烈要求这样做。 但是违反了协议, 通常不应判定为严重错误而导致基本功能失败。

证明我的测试用例这种情况是不存在的,还是需要详细看看http头部每个字段的具体含义用法,遇到问题多和业务沟通,事半功倍。

这次就总结到这里,如果有什么问题,欢迎沟通哈

原创粉丝点击