http相关知识(http状态码、Restful、http headers、http缓存策略)
状态码:
- 1xx:服务器收到请求
- 2xx:请求成功 200成功
- 3xx:重定向 301永久重定向; 302临时重定向; 304资源未被修改
- 4xx:客户端错误 403没有权限; 404资源未找到
- 5xx:服务端错误 500服务器错误; 504网关超时
Restful API
-
一种新的API设计方法
-
传统的API设计:把每个url当作一个功能
-
Restful API设计:把每个url当作一个唯一的资源
http headers
常用的http headers
-
Request Headers中的
Accept:浏览器可接受的数据格式
Accept-Encoding:浏览器可接收的压缩算法,如gzip
Accept-Languange:浏览器可接收的语言
connection:keep alive 一次TCP连接重复使用
cookie
Host: 请求的域名是什么
User-Agent:简称(UA)浏览器信息
content-type:发送数据的格式,如application/json -
Response Headers中的
content-type:返回数据的格式,如application/json
content-length:返回数据的大小,多少字节
content-Encoding:返回数据的压缩算法,如gzip
Set-Coolie:服务端改cookie -
还可以自定义headers
-
缓存相关的headers
Cache-Control
Last-Modified
Etag
http缓存
什么是缓存:缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据)的临时地方。
什么是浏览器缓存: 浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存,以便下一次访问时重复使用,节省宽带,提高访问速度,降低服务器压力。
http缓存机制主要在http响应头部中设定,响应头中相应字段为Expires、Cache-Control、Last-Modified、Etag。
缓存的数据,必须在第一次请求获取到资源后,然后根据返回的信息来告诉如何缓存资源,可能采用的是强制缓存,也可能告诉客户端浏览器是协商缓存,这都需要根据响应的header内容来决定的。
-
浏览器在请求某一资源时,会优先获取该资源缓存的header信息,判断是否命中强制缓存(cache-control和expires信息),若命中直接从缓存中获取资源信息,包括缓存header信息;本次请求就避免了和服务器进行通信;
-
如果灭有命中强制缓存,浏览器会发出请求到服务器,请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/If-Modified-Since和If-None-Match),由服务器根据请求中的相关header信息来对比结果是否协商缓存命中;若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存中获取;否则返回最新的资源内容;
为什么需要缓存:节省资源,节省流量,节省时间,也就是所谓的优化。页面加载更快,网络请求相比CPU计算很慢,为了优化网络请求,所以需要缓存。
哪些资源可以被缓存:静态资源(css,js,img)
http缓存策略(强制缓存+协商缓存)
强制缓存:
Cache-Contral的值
-
max-age 最大缓存时间,以秒为单位(一般半年,一年,两年)
-
no-cache 不用强制缓存
-
no-store 不用服务端缓存
-
no-cache:不使用本地缓存。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。
-
no-store:直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。
-
public:可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。
-
private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。
协商缓存
- 协商缓存是服务端缓存策略,不是缓存在服务端
- 服务器判断客户端资源是否和服务端资源一样,一样就返回304,否则返回200和最新资源
资源标识在Response Headers中有两种(两个可以同存,会优先使用Etag)
Last-Modified 资源的最后修改时间 (modified:修改)
Etag资源的唯一标识(一个字符串,类似于人的指纹)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了