一、http常见的状态码有哪些
1.状态码分类
1XX: 服务器收到请求,但是没有返回
2XX: 请求成功,如200
3XX: 重定向,如302,跳转到另一个地址
4XX: 客户端错误,如404
5XX: 服务端错误,如500
2.常见状态码
200:成功
301:永久重定向(配合location,浏览器可以自行处理)出现的情况,更换域名。重定向到新的域名不需要访问老域名
302:临时重定向(配合location,浏览器可以自行处理)每次访问都去老域名,请求的Response.headers.Location就是跳转的地址
304:资源未被修改(请求服务端的时候,返回提示资源还有效,不需要重复请求)
404:资源未找到
403:没有权限(未登录,或者没有访问权限)
500:服务器错误
504:网关超时(能访问通服务器,但是服务器请求其他资源的时候超时了)
3.关于协议的规范
不要违反规定,列如IE浏览器
二、http常见的header有哪些
-
常见的Request Headers (客户端向服务端发起的请求头) 1.Accept 浏览器可接收的数据模式 2.Accept-Encoding 浏览器可接收的压缩算法,如gzip 3.Accept-Languange 浏览器可接收的语言,如zh-CN 4.Connection: keep-alive 一次TCP链接可以重复使用 5.cookie 同域每次请求资源的时候都会把cookie给带上 6.Host 请求的域名是什么 7.User-Agent (UA)浏览器信息,有很多手机系统的信息 8.Content-type 发送数据的格式,如 application/json -
常见的Response Headers (服务端向客户端返回的响应头) 1.Content-type 返回的数据格式,如 application/json 2.Content-length 返回的数据大小,n字节 3.Content-Encoding 返回数据的压缩算法,如 gzip 4.Set-Cookie 服务端通过set-cookie修改cookie -
缓存相关的headers Cache-Control Expires Last-Modified If-Modified-Since Etag If-None-Match
三、什么是Restful API
传统的methods:
get: 获取服务器的数据
post: 向服务器提交数据
现在的methods:
get:获取数据
post:新建数据
patch/put: 跟新数据
delete: 删除数据
Restful API
传统的API设计:把每个URL当作一个功能
Restful API设计:把每个URL当作一个唯一的资源
如何设计成一个资源
尽量不用URL参数
如: /api/list/2
用 method 表示操作类型
post /api/blog 创建一个数据
patch /api/blog/100 更新一个数据
get /api/blog/100 获取一个数据
四、描述一下http的缓存机制(重要)
-
什么是缓存
固定资源在请求第一次之后没有必要再次请求,这时需要将他暂存起来,这就是缓存 为了让页面加载更快 一般静态资源容易被缓存(js css img) -
http 缓存策略(强制缓存 + 协商缓存)
- 强制缓存
Expire
控制缓存过期,已被Cache-control代替了
Cache-Control
他是在Response Headers中
他控制着强制缓存的逻辑
max-age 最大过期时间
no-cache 不设置本地缓存,去服务端请求
no-store 不设置本地强制缓存也不让服务端进行缓存
private 只能允许最终用户进行缓存
public 允许中间的路由或者代理进行缓存
例:Cache-Control: max-age=31523000 (最大存储时间/单位秒)
sequenceDiagram
客户端->>服务端: 初次请求
服务端-->>本地缓存(客户端缓存): 请求结果缓存,并设置过期时间
客户端-)本地缓存(客户端缓存): 再次请求就不走服务端,直接获取本地缓存的数据了
- 协商缓存(对比缓存)
这是服务端缓存的策略,服务端来判断这个资源是不是应该被缓存,就是请求过来时服务端告诉客户端在这块资源没有改变,直接用之前的就可以。你们这次请求就不会有请求时间了。 服务端判断客户端资源是否和服务端的资源一样,一致就返回304,否则返回200和最近的资源
sequenceDiagram
客户端->>服务端: 初次请求
服务端-->>客户端: 返回资源和资源标识(Last-Modified/Etag)
客户端->>服务端: 再次请求,带着资源标识(If-Modified-Since/If-None-Match)
服务端-->>客户端: 返回304,或者新的资源和资源标识(Last-Modified/Etag)
-
资源标识
在Response Headers中
Last-Modified 资源的最后修改时间
Etag 资源的唯一标识
优先使用Etag
Last-Modified只能精确到秒
如果资源被重复生成而内容不变,Etag更加精确
五、 刷新操作方式,对缓存的影响
三种刷新操作
1.正常操作:地址栏输入url,跳转链接,前进后退 -- 强制缓存有效、协商缓存有效
2.手动刷新:F5、点击刷新按钮、右击菜单刷新 -- 强制缓存失效、协商缓存有效
3.强制刷新:Ctrl+F5 、shift + ctrl + r -- 强制缓存失效、协商缓存失效