这是我参与「第五届青训营 」伴学笔记创作活动的第6天
http缓存
缓存对象常为静态资源(图片、js、css)
用webpack打包的时候在后面加一串哈希值(根据内容算出来的)
- 文件内容不变,哈希值也不变,因此可以使用缓存机制
本地强制缓存流程
-
客户端初次请求服务端资源,若请求的是可缓存资源,服务端会在返回资源的同时在header中加一个cache-control,包含最大缓存时间等信息,然后缓存到本地
- max-age:最大缓存时间
- no-cache:只使用协商缓存(也就是不判断资源是否过期,直接向服务器请求)
- no-store:不使用缓存
-
客户端再次请求这个资源时,会先去本地缓存中找这个资源
-
若超过最大缓存时间,才会去服务端请求这个资源,或进入协商缓存流程
协商/对比缓存
服务端缓存的策略,判断缓存和服务端资源是否一致,一致返回304,不一致返回200和最新资源
流程:
-
初次请求,服务端返回资源和资源标识,并将资源缓存到本地,再次请求时带着资源标识请求
- Last-Modified:资源最后修改时间
- Etag:资源唯一标识,优先级更高
-
资源一致返回304,浏览器使用本地缓存,不一致则返回新资源和新标识
刷新页面对缓存的影响
正常跳转: 都有效
手动刷新F5: 强制缓存失效
- 解决当服务器在缓存时间没到期时就修改了数据,浏览器不能及时更新的问题
强制刷新Ctrl+F5: 都失效
HTTPS
- http是明文传输,敏感信息容易被劫持,https则会给信息加密,就算被劫持也无法解密
- https默认使用443端口,http则为80
- https同时使用对称加密和非对称加密,先使用非对称加密方式获得一个字符串,再将这个字符串作为key使用对称加密,这样成本更低
对称加密: 使用同一个key进行加密和解密
非对称加密:使用一对key,用A key加密后只能用B key解密
- 传递的只有公钥(用于加密),私钥(用于解密)始终在服务端不会传递
http证书
中间人攻击: 黑客截取到公钥并替换为自己的公钥,让客户端误以为拿到的是服务端的公钥
- https 引入了 CA 证书机制,也就是找一个权威的第三方机构为自己背书,CA 证书上的数字签名可以用来保证双方的通信内容未遭到篡改。
HTTPS连接过程
相当于HTTP+TLS
-
TCP三次握手:SYN->SYN+ACK->ACK
-
TLS四次握手:验证证书、使用非对称方式生成之后对称加密的密钥
- 这个过程涉及两对密钥(非对称+对称)
-
加密通信:对称加密
状态码
- 1xx-服务器收到请求
- 2xx-请求成功
- 3xx-需要重定向,浏览器直接跳转;301永久,302临时,304资源未修改
- 4xx-客户端请求错误(如url错误),404资源未找到,403无访问权限
- 5xx-服务器端错误
RESTful
- 一种api设计方法或者规范
- 传统的API把url当成一个功能,restful把url当成唯一资源,如何操作这个资源则通过 method 表示
- 在使用上,面向资源(如增删改查)时遵守,面向过程(如登录)则可以放弃
特点
- 无状态:一次调用就会返回结果,不存在 打开连接->访问数据库->关闭连接 这种模式
- 面向资源:不管是数据还是服务/行为,一切都是资源
- 使用HTTP动词:在面向资源的基础上,加入如 GET POST PUT等
-
HATOAS Hypertext As The Engine Of Application State 超媒体作为应用状态引擎
- 即返回结果中提供链接,连向其他 API 方法,使得用户不查文档,也知道下一步应该做什么