什么是http
- Hyper Text Transfer Protocol 超文本传输协议
- 应用层协议,基于TCP协议
- 请求响应
- 节点可拓展
- 无状态
TCP协议的特点是:
- 面向连接
- 点对点(一对一)
- 面向字节流,也就是说仅仅把上层协议传递过来的数据当成字节传输,为了实现TCP上述的特点,TCP需要解决的是面向连接(建立连接和关闭连接的方式),错误传输(确认错误和重传),流量控制(发送方和接收方的传输速率协调),拥塞控制四个方面 无状态:没有记忆能力,每个请求都是独立的
协议分析
协议发展
HTTP/1.1 1997年
HTTP2 2015年 16年68%都是HTTP2
报文
Method
fetch默认方法是GET,常用方法大多是POST和GET
请求操作有safe和idempotent(幂等)类型
- safe,不会修改服务器数据的方法(GET,HEAD,OPTIONS)
- idemoptent,同样的请求执行一次和连续执行多次下效果是一样的,服务器的状态也是一样的,所有safe方法都是idemoptent的(GET,HEAD,PUT,OPTIONS.DELETE)
状态码
code一般通过response.status获取,只要code值在200~300之间均为相应成功。
RESTful API
请求头&响应头
前端再在向服务器发送请求时常常在headers中添加
Content-Type标明上传的数据类型 Cookie常用于同源访问和保存登录状态
缓存
cookie
HTTPS
HTTP基础上通过TSL/SSL加密
静态资源
- 前端的固定页面,不需要程序处理直接就能访问,效率高
- 实现方案:缓存+CDN+文件名hash
跨域
跨域是由浏览器的同源策略产生的一种自卫行为。
一个URL由协议protocol / 主机host / 端口port组成,这三部分都相同时为同源。当前url和请求url不同源时就会产生跨域。
跨域解决方案:
- CORS
- 代理服务器
- 同源策略是浏览器的的安全策略,不是http的
- Iframe
- 诸多不便
保存登录状态
适合使用JWT的场景
- 有效期短
- 只希望被使用一次,比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下特性:能够标识用户,该连接具有时效性(通常只允许几小时内激活),不能被篡改激活其他可能的账户,一次性的。这种场景就适合JWT,而且由于JWT的一次性,单点会话和登录非常不方便,session有许多成熟的框架可以使用,JWT还需要自己实现逻辑
SSO单点登录
用户体验
网络优化
稳定性
通信方式
WebSocket
QUIC