HTTP statusCode 200 OK 和 304 Not Modified

场景

启动Node服务器之后,GET一个文件资源,多次刷新发现除了第一次,之后的相应码皆为304
响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)
首先看响应码大类:

请求码格式 含义
1XX 信息响应
2XX 成功响应
3XX 重定向
4XX 客户端错误
5XX 服务端错误

再看200和304的区别:

  • 200 OK

    请求成功。成功的含义取决于HTTP方法:

      GET:资源已被提取并在消息正文中传输。
      HEAD:实体标头位于消息正文中。
      POST:描述动作结果的资源在消息体中传输。
      TRACE:消息正文包含服务器收到的请求消息
    
  • 304 Not Modified
    如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

也就是说,两者都表示获取到了资源。
区别:
第一次请求服务器,得到资源的响应,响应码为200
(此时客户端的浏览器可能会对响应数据进行缓存,根据浏览器设置而定)
之后再次请求,此时:
浏览器这边有一份数据,时间戳为aaa,
请求到服务端的时候,发现服务器里的数据,自从上次请求之后未经修改,那就不用了发数据回来了。
所以此时返回状态码304

程序里是如何判断:这次要从服务器请求的资源,我在浏览器已经访问过,有了缓存,且两份资源一样的|未经修改的?
两个参数:
- 请求头的If-Modified-Since
- 响应头的Last-Modified
就是通过比较这两个参数是否变化。
在这里插入图片描述
验证:
两种方式验证:
- 修改服务端的文件内容(加空行,字符之类的,重新保存)
- 请求|禁用本次资源:切换浏览器,或清除浏览器缓存、禁用浏览器缓存等。
再次发起请求,查看状态码,为200
在这里插入图片描述

Refer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章