这是我参与第五届青训营伴学笔记的第五天
http协议
1.初识http
http协议即为 超文本传输协议
应用层协议,基于tcp协议
请求 响应
简单可扩展
无状态 每个请求之间都是孤立的
2.协议分析
使用版本
0.9 单行协议 只可承载html文档
1.0 构建可扩展性 支持多种文档类型 ( 基于tcp)
1.1 标准化协议 复用 缓存 内容协商 在目前情况下是使用最久的版本
报文 method
head使用较少
trace 使用较少
safe:不会修改服务器的数据的方法
get head options
ldempotent(幂等):同样的请求被执行一次和多次效果一致,服务器的状态也是 所有safe的方法都是幂等
get head options put delete
状态码
三位表示
1xx 接受
2xx 成功
3xx 重定向 要求必须更替
4xx 客户端错误 请求有语法错误
5xx 服务器的错误
restful API
一种API设计风格
必须遵循 1.每个url代表一种资源
2.客户端和服务器之间,传递这种资源的某种表现层
3.客户端通过http method 对服务器端资源进行操作,实现“表现层状态转化”
常用请求头 有很多请求头 列举一些比较常见的
常用响应头
set-cookie 告诉服务器要传输那些cookie信息
常用响应头
缓存
强缓存 时间截
可缓存性
到期
重新验证 一旦资源过期 没有设置must断开服务器时 有本地缓存会使用本地缓存
协议缓存 etag/if-none-match:资源的特点版本的标识符 类似指纹
last-mod 最后的修改时间 绝对时间
和缓存相关的请求头在浏览器中的优先级
cookie
set-cookie-response
name=value 必须要返回“”=“”这样的字符键
secure 更安全
httponly 加强安全性
MDN有更多的协议介绍
发展
http/2
更快 更稳定 更简单
每个message都化为帧 每个帧都包含帧头 至少也会标识除当前帧所属的数据流
这里的帧采用二进制编码 使得传输效率更高
消息:与逻辑请求或响应消息对应的完整的一系列帧
数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
交错发送 :接受方重组织 提高了数据传输的效率
1.每个目标和地址建立链接后,链接都是永久的
2.流控制:阻止发送方向接受方发送大量数据的机制 提交效率
3.服务器推送 智能分析,主动推送一些信息 但是有些时候用不到这些信息就会降低效率
https
经过一些加密的过程更为安全
对称加密:加密和解密都是使用同一个密钥
非对称加密:加密和解密需要不同的密钥 公钥 私钥
一般我们会混用对称和非对称加密
3.场景分析
静态资源
(提高用户体验)静态资源部署方案:缓存+CDN+文件名hash
1.使用本地缓存
2.没有本地缓存,把静态资源放在CDN上面
CDN 通过用户就近性服务器(比如在地理位置上就近)负载的判断,CDN确保内容以一种极为高效的方式 为用户的请求提供服务
3.文件名哈希
场景分析-登陆
为什么发起option请求
跨域 cross-origin
协议还有其他部分不同被视为跨域
同域 same-origin
https 默认有:443端口号
如果网址不同会认为是同域
跨域请求怎么处理 请求分为: 简单请求 复杂请求
发起预请求 服务端是否允许跨域请求(复杂请求)
相关协议头
access-control-
跨域解决方案
1.CORS
2.代理服务器
同源策略是浏览器的安全策略,不是http
绕开浏览器
3.Iframe通信 使用不方便
刷新之后为什么可以记住登录信息
鉴权
1.session+cookie
2.JWT
跳转后的网站自动登录
是一种解决方案 SSO:单点登录
4.实战
如何发起http协议
在浏览器的场景中
readstate
下面表示阶段
0
1
2
3
4 完成
AJAX之Fetch
在Node场景中
常用的请求库 axios
支持浏览器,nodejs环境
有丰富的拦截器
用户体验
1.网络优化
CDN加速传输速度
DNS预解析
2.稳定性
**重试机制 **
超时
错误
重试是保证稳定的有效手段,但是要防止加剧恶劣情况
缓存
缓存合理使用,作为最后一道防线
数据安全
-HTTPS
-劫持
了解更多
通信方式
WebSocket 全双工通讯网络技术
场景:实时性高
扩展
QUIC 基于UDP封装的协议 借用了UDP
类似于TCP的可靠传输
类似于TLS的加密传输,支持完美前向安全