这是我参与「第四届青训营 」笔记创作活动的第9天
初识HTTP
OSI七层模型
HTTP:超文本传输协议,应用层协议,TCP协议作为其传输层协议。简单可扩展,无状态连接
协议发展历程
协议分析
HTTP/1.1
HTTP/1.1的请求/响应报文
Method
根据方法的特点,有如下分类
- Safe:不会修改服务器数据,GET HEAD OPTIONS
- Idempotent幂等:同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有safe的方法都是Idempotent的,GET HEAD OPTIONS PUT DELETE
状态码 StatusCode
1xx: 指示信息,表示请求已接收,继续处理
2xx: 成功,表示请求已被成功接收、理解、接受
- 200 OK 客户端请求成功
3xx: 重定向,要完成请求必须进行更进一步的操作
- 301 资源(网页等)被永久转移到其他URL
- 302 临时跳转
4xx: 客户端错误,请求有语法错误或请求无法实现
- 401 unauthorized 请求未经授权
- 404 请求资源不存在,可能是输入了错误的URL
5xx: 服务器端错误,服务器未能实现合法的请求
- 500 服务器内部发生了不可预期的错误
- 504 Gateway Timeout 网关或者代理服务器无法在规定时间获得想要的响应
补充:RESTful API,一种API设计风格,借助HTTP method实现表意
常用请求头
常用响应头
缓存
强缓存:直接就可以用的缓存
协商缓存:还要和服务器端通信确认可不可以用
Cookie
响应头中的Set-Cookie
HTTP/2
帧 frame: HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
消息 message:与逻辑请求或响应消息对应的完整的一系列帧。
数据流 stream:已建立的连接内的双向字节流,可以承载一条或多条消息。
特性
- 永久性:HTTP/2连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制,eg视频播放暂停
- 服务器推送
HTTPS
在HTTP基础上增加了TSL/SSL加密过程,提高安全性
常见场景
静态资源部署方案:缓存 + CDN + 文件名hash
CDN:通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务 文件名hash:在每次文件变化时更新文件名,确保拿到最新的文件
登录
跨域问题及解决方案
CORS: Cross-Origin Resource Sharing
预请求:获知服务器是否允许该跨域请求(复杂请求)
代理服务器
- 同源策略是浏览器的安全策略,不是HTTP的
Iframe【诸多不便】
登陆鉴权
-
Session + Cookie
-
JWT(JSON web token)
SSO 单点登录
单点登录:用户只需登录一次,即可通过单点登录系统(eTrueSSO)访问后台的多个应用系统,二次登陆时无需重新输入用户名和密码。
实际应用
浏览器中
- XHR:XMLHttpRequest
- Fetch:XHR的升级版,使用Promise
node中
- 标准库:HTTP/HTTPS(功能有限)
常用的请求库
- axios(丰富的拦截器)
网络优化及稳定性
More
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- URL使用ws:// 或 wss:// 开头
QUIC
Quick UDP Internet Connection