当前位置: 首页 > news >正文

【第三天】计算机网络 HTTP请求中常见的状态码 什么是强缓存和协商缓存

HTTP请求中常见的状态码

前面不是说过了HTTP的请求报文和响应报文吗?
状态码不就是响应报文里才有的吗。
同时响应报文的第一行包含了协议版本,状态码以及描述。
状态码有以下这几个类别:

状态码类别含义
1XXinformation(信息性状态码)接收的请求正在处理
2XXsuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要今昔附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错

1XX信息:

100 Continue: 表明到目前为止都正常,客户端可以继续发送请求或者忽略这个响应

2XX信息:

200 OK
204 No Content: 请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务端发送消息,而不需要返回数据时使用。
206 Partial Content:表示客户端进行了范围请求,响应报文包含由Content-Range指定范围的实体内容。

3XX重定向:

301 Moved Permanently:永久性重定向
302 Found:临时性重定向
303 See Other:和302有着相同的功能,但是303明确要求客户端应该采样GET方法获取资源。
注意:虽然HTTP协议规定301,302状态下重定向时不允许把POST方法改成GET方法,但是大多数浏览器都会在301,302和303状态下重定向时把POST方法改成GET方法。
304 Not Modified:如果请求报文首部包含一些条件,如:if-Match…,如果不满足条件,服务器会返回304状态码。
307 Temporary Redirect:临时重定向,与302含义类似,但是307要求浏览器不会把重定向请求的POST方法改为GET方法。

4XX 客户端错误:

400 Bad Request: 请求报文中存在错误。
401 Unauthorized:该状态码表示发送请求需要有认证消息。如果之前已经进行过一次请求,则表示用户认证失败。
403 Forbidden:请求被拒绝
404 Not Found

5XX 服务器错误:

500 Internal Server Error:服务器正在执行请求时发生错误
503 Service Unavailable:服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。

什么是强缓存和协商缓存

强缓存和协商缓存是HTTP缓存机制中的两个重要概念。它们通过在浏览器和服务器之间建立缓存机制,减少不必要的网络请求,提高网页的加载速度。
HTTP缓存则是将之前请求过的资源存储在本地,以便在再次访问相同资源时,可以直接从本地缓存中读取,无需重新向服务器请求。

强缓存:

强制性缓存,一旦资源被缓存,那么浏览器在一定的时间内就不会向服务器发送请求,直接从本地缓存中读取资源。
在HTTP/1.1协议中,强缓存主要通过两个头部字段来实现:Expires和Cache-Control
Expires:该字段用于指定资源过期的时间戳。这个时间戳和服务器返回的过期时间戳进行比较,判断是否过期。本地大于服务器返回的就过期了。
Cache-Control:该字段是强缓存的核心,它提供了一个更加灵活的缓存机制。我们可以通过设置里面的不同指令,来控制资源的缓存行为。如:max-age=3600表示资源在3600秒内不会过期;no-cache表示需要向服务器验证资源的有效性;no-store表示禁止缓存资源。

但是强缓存可能会导致硬刷新问题,当浏览器强制刷新页面时,即使资源没有过期,浏览器也会忽略本地缓存,强行再发送请求。为了避免这种情况,开发者可以在服务端设置:Cache-Control:no-cache,Cache-Control:no-store,这样浏览器在每次请求资源时都会向服务器验证资源的有效性。

协商缓存:

协商缓存是一种可选的缓存机制,它允许浏览器和服务器在资源过期后进行协商,以确定是否使用本地资源。协商缓存主要通过两个头部字段实现:Last-Modified,ETag
Last-Modified:该字段指定了资源的最后修改时间。当浏览器向服务器发送请求时,会带上本地缓存的最后修改时间戳。服务器会与当前资源的实际修改时间进行比较,如果一致,则认为资源未修改,返回一个304Not Modified状态码,告诉浏览器可以直接使用本地缓存的资源;否则,认为该资源已修改,需要重新下载资源。
ETag:该字段提供了一种更加精确的资源验证手段。与Last-Modified相比,ETag是基于资源的特定内容生成的一个唯一标识符。当资源内容发生变化时,ETag也会随之发生变化。浏览器向服务器发送请求时,会带上本地缓存资源的ETag,服务器会与当前的ETag进行比较,如果一致,则认为资源未修改。

在实际开发中,为了获得更好的缓存效果,可以将强缓存和协商缓存结合使用。首先使用强缓存来减少不必要的网络请求,当资源过期或发生硬刷新时,再通过协商缓存来验证资源的有效性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spark进化论:从RDD到DataFrame,揭秘Spark SQL如何成为性能引擎的幕后英雄
  • 【数据结构】排序
  • Linux 安装 GDB (无Root 权限)
  • 【个人亲试最新】WSL2中的Ubuntu 22.04安装Docker
  • 构造+有序集合,CF 1023D - Array Restoration
  • CSS的常见难见
  • 谷粒商城实战笔记-编码经验积累
  • 神经网络与注意力机制的权重学习对比:公式探索
  • ts给vue中props设置指定类型
  • 基于springboot+vue+uniapp的居民健康监测小程序
  • stats 监控 macOS 系统
  • 【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • 【Gitlab】SSH配置和克隆仓库
  • 基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节
  • flex:1
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • @jsonView过滤属性
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 30天自制操作系统-2
  • 4. 路由到控制器 - Laravel从零开始教程
  • CSS3 变换
  • flask接收请求并推入栈
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • jquery ajax学习笔记
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • nodejs调试方法
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • vue中实现单选
  • 汉诺塔算法
  • 前端工程化(Gulp、Webpack)-webpack
  • 使用 @font-face
  • 使用docker-compose进行多节点部署
  • 首页查询功能的一次实现过程
  • 微信支付JSAPI,实测!终极方案
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 优化 Vue 项目编译文件大小
  • 鱼骨图 - 如何绘制?
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 怎么将电脑中的声音录制成WAV格式
  • 带你开发类似Pokemon Go的AR游戏
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​如何使用QGIS制作三维建筑
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • (1)(1.13) SiK无线电高级配置(六)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C#)获取字符编码的类
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Note)C++中的继承方式
  • (第30天)二叉树阶段总结
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)JAVA使用POI操作excel
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (七)Appdesigner-初步入门及常用组件的使用方法说明