这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
上篇文章主要讲述了HTTP协议的基本定义、主要特征、协议发展历程和报文结构。而接下来这篇文章将继续介绍HTTP协议的应用场景以及实战。
一、应用场景分析
重点
- 静态资源
- 登录
静态资源
步骤:
- 打开chrome
- 输入https:/ /www.toutiao.com
- 打开控制台
- 右键- ->检查
- F12
- 切换到network
缓存策略是怎样的?
- 强缓存
- Cache control: 一年
还有什么信息吗?
- 允许所有域名访问
- 资源类型: css
静态资源方案: 缓存+ CDN +文件名hash
- CDN : Content Delivery Network
- 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
登录
业务场景
- 表单登录
- 扫码登录
技术方式
- SSO
- 账号密码登陆
- 打开控制台- network -勾选preserve log -过滤quick login
- 观察请求
跨域
跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。
下面介绍一下跨域:
跨域 CORS ( Cross-Origin Resource Sharing )
- 预请求:获知服务端是否允许该跨源请求(复杂请求) 相关协议头
- Access-Control-Allow-Origin
- Access-Control-Expose-Headers
- Access-Control-Max- Age
- Access-Control-Allow-Credentials
- Access-Control-Allow- Methods
- Access-Control-Allow-Headers
- Access-Control-Request-Method
- Access-Control-Request-Headers
- Origin
那么遇到跨域问题,我们该如何解决呢?下面看解决方案:
- CORS
- 代理服务器
- 同源策略是浏览器的安全策略,不是HTTP的
- Iframe
- 诸多不便
看完跨域,接下来我们回到登录继续看登录:
针对上面的两个问题,我们做出解决:
1.向什么地址做了什么动作?
- 使用POST方法
- 目标域名 https : //sso.toutiao.com
- 目标path /quick login/v2/
2.携带了哪些信息,返回了哪些信息?
携带信息
- Post body,数据格式为form
- 希望获取的数据格式为json
- 已有的cookie
返回信息
- 数据格式json
- 种cookie的信息
适合使用jwt的场景:
- 有效期短
- 只希望被使用一次
比如,用户注册后发-封邮件让其激活账户, 通常邮件中需要有一个链接, 这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活), 不能被篡改以激活。其他可能的账户,一次性的。而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。
二、实战分析
下面看一下具体的例子:
浏览器
AJAXZ之Fetch
- XMLHttpRequet的升级版
- 使用Promise
- 模块化设计,Response,Request,Header对象
- 通过数据流处理对象,支持分块读取
Node
标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
常用的请求库: axios
- 支持浏览器、nodejs环境
- 丰富的拦截器
三、拓展
通信方式
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL使用ws://或wss.//等开头
QUIC : Quick UDP Internet Connection
- 0-RTT建联(首次建联除外)。
- 类似TCP的可靠传输。
- 类似TLS的加密传输,支持完美前向安全。
- 用户空间的拥塞控制,最新的BBR算法。
- 支持h2的基于流的多路复用,但没有TCP的HOL问题。
- 前向纠错FEC。
- 类似MPTCP的Connection migration。
总结
今天通过对HTTP协议的应用场景的了解以及一些实例的了解。我知道了它在静态资源和登录方面的应用。以及对通信方面的了解,我知道了WebSocket的概念,在学习中我发现WebSocket使得客户端和服务器之间的数据交换变得更加简单,它为数据的传输又增加了便捷,大大增加了数据传输的效率。