http请求时返回的304是干什么的

请求成功时,返回的是200,那么返回的304是什么意思呢?

如上图,200和304有什么区别呢?

看下http的响应头:

刷新一次,对比下

这次请求的头信息中多了一条If-Modified-Since,而且返回的响应中,状态变为了304,这是怎么回事?

这次请求的头信息中多了一条If-Modified-Since,而且返回的响应中,状态变为了304,这是怎么回事?还记得红薯那篇文章页中的304么,你会发现,304多出现在对于静态资源的请求上面。

原来对于静态资源来说:

  1. 当浏览器第一次发起请求时(请求头中没有If-Modified-Since),server会在响应中告诉浏览器这个资源最后修改的时间(响应头中的Last-Modified)。(见上图)

  2. 浏览器也很聪明,当你再次(点击链接,或者F5,或者回车,但是不能是ctrl+F5)请求这个资源时,浏览器会询问server这个资源自上次告诉我的最后修改时间以来有没有被修改(请求头中If-Modified-Since)。(见上图)

  3. 如果资源没有被修改,server返回304状态码,并不会再次将资源发送给浏览器,浏览器则很知趣的使用本地的缓存文件。(见上图)

所以所有的静态资源如果没有发生变化,通常是不会传递多次的,不管什么浏览器或者server都应该遵守这种询问的约定。看起来很爽啊,很智能是不是?这种约定的机制就是 http缓存协商——这是约定优于配置的又一体现。

 

我们在写httpservlet时也会遇到类似的情况,如果你重写getLastModified这个方法的话,也会出现304的

 @Override
    protected long getLastModified(HttpServletRequest req) {
        /**
         * 这里你要自己决定动态内容的最后修改时间,例如你可以返回
         * -- 数据缓存最后更新的时间
         * -- 简单起见,我们假设最后的修改时间是 1000
         */
        return 1000;
    }

 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP返回304状态码表示资源未修改。当浏览器发送一个请求,会在请求头中包含一个If-Modified-Since字段,该字段的值是上次请求该资源服务器返回的响应头中的Last-Modified字段的值。如果服务器发现请求的资源在上次请求之后没有发生修改,那么就会返回一个304状态码,告诉浏览器可以使用本地缓存的资源。这样可以减少不必要的数据传输,提高网页加载速度。如果资源没有被修改,服务器不会再次发送资源给浏览器,而是让浏览器使用本地的缓存文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [http请求返回304干什么的](https://blog.csdn.net/bestxiaok/article/details/88541094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [理解HTTP缓存和304状态码](https://blog.csdn.net/canot/article/details/76359917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值