http状态码为304(CDN中的“状态码304”详解)

在CDN中,我们曾经的疑惑:

1. 为什么在浏览器中访问是304,而通过linux下curl进行测试,却是200?

2. 304究竟是源站返回的?还是CDN节点返回的?

3. 如果源站返回304,那么客户端收到的会是304么?

4. ?????

304的名词解释

状态码304百度百科结果:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:客户端已经执行了GET,但文件未变化。

一一解答:

首先需要清楚304的请求原理:之所以会有304,是因为源站收到了来自客户端的对比需求(是否对比是客户端提的我爱线报网需求)。换句话说,只有当客户端在请求的时候提供了双方早已商榷好的对比参数,服务端才会进行参数对比,进而判断是否需要返回文件内容给客户端,若客户端未提供这些参数,那么服务端将直接返回200(文件内容)。而这些参数就是:

if-none-match:当服务端收到的request header中包含这个头部信息时,将获取其中的参数值(客户端缓存的文件的Etag值),与文件本身的Etag值进行对比,若一致,则返回304。

if-modified-since:当服务端收到的request header中包含这个头部信息时,将获取其中的参数值(客户端缓存的文件的Last-modified值),与文件本身的La我爱线报网st-modified时间进行对比,若一致,则返回304。

为什么在浏览器中访问是304,而通过linux下curl进行测试,却是200?

请仔细对比下方两个request header的区别,上为浏览器请求头(前提是浏览器已访问过该文件),下为linux请求头,你将发现浏览器的请求头中包含很多文件与CDN的信息,其中便包括下方红色方框的两个头部信息。

当服务端接收到这两个头部信息后,便会进行对比,发现文件未变化,则返回304。

如上例子,CDN节点若过期回源,源站返回304,那是否linux端也会接收到304呢?

不会。由于CDN的节点均为代理访问,因此CDN的中心节点接收到的304为源站返回,而边缘我爱线报网节点接收到的304为中心节点返回,客户端接收到的304为边缘节点返回。CDN节点过期回源时,将带着if-none-match if-modified-since两个头部进行验证,若文件未经修改,则返回304,但linux客户端在请求时并未带上if-none-match if-modified-since,因此CDN节点将直接返回200(并同时返回源文件数据包)。

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

按键精灵找图点击教程(按键精灵找图之大牛找图方法)

2024-6-5 17:03:55

行业资讯

2月份发生的国家大事(英语热词(1):2月发生的大事教你用英语精准表达)

2024-6-5 17:24:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索