HTTP实用指南 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第8天 与大家分享HTTP实用指南,关于HTTP协议的相关知识,不足之处欢迎大家批评指正!
01 初始HTTP
什么是HTTP?
1.Hyper Text Transfer Protocol超文本传输协议
2.应用层协议,基于TCP协议
3.请求响应
4.简单可扩展
5.无状态
02 协议分析
协议发展
- HTTP1.1
基于TCP协议,希望有更好的表现,做链接复用,缓存等等
公认标准化协议版本
使用最久
- HTTP2.0
2015年左右推出
对用户体验更高
设计让传输更稳定、高速的性能
协议报文
HTTP1.1
- Method
请求:
1.Safe(安全的):不会修改服务器数据的方法
GET,HEAD,OPTIONS
2.Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有的safe方法都是Idempotent的
GET,HEAD,OPTIONS,PUT,DELETE
- 状态码
200 OK:客户端请求成功
301-资源(网页等)被永久转移到其它URL
302-临时跳转
401 Unauthorized-请求未经授权
404-请求资源不存在,可能输入错误URL
500-服务器内部发生了不可预期的错误
504-Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应
- RESTful API
定义
一种设计风格;REST - Representational State Transfer
(1)每一个URI代表一种资源
(2)客户端和服务器之间,传递这种资源的某种表现层
(3)客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
- 常用请求头
- 常用响应头
- 缓存
1.强缓存
定义:如果资源本地有,可以直接用
cache-control:协议头
2.协商缓存
缓存能不能用,是不是最新的,要和服务器通信,协商
- 缓存的工作
- cookie
Cookie:携带用户身份相关的信息
set-cookie字段的含义
Set-Cookie-response
HTTP2
- 概述
更快、更稳定、更简单
- 概念
1.帧(frame)
HTTP/2通信的最小单位,每个帧都包含帧头,至少也会表示出当前帧所属的数据流。
二进制
2.消息
与逻辑请求或响应消息对应的完整的一系列帧。
3.数据流
已建立的连接内的双向字节流,可以承载一条或多条消息。
帧可以交错发送,接收方重组织
4.复用性
HTTP连接都是永久的,而且仅需要每个来源一个连接,不需要多次重复地建立连接
5.其他特性
主动性
流控制:阻止发送方向接收方发送大量数据的机制
服务器推送
主动推送信息给接收端,需要部署一些功能
HTTPS
1.概述
HTTPS:Hypertext Transfer Protocol Secure
经过TSL/SSL加密
2.加密方法
加密:两端——浏览器端和服务器端
对称解密:加密和解密都使用同一个密钥
非对称加密:加密和解密需要使用两个不同的密钥——公钥(public key)和私钥(private key)
03 场景分析
操作步骤
1.打开Chrome
2.输入https://www.toutiao.com
3.打开控制台(右键->检查 F12)
4.切换到network
静态资源
切换到CSS
刷新前
刷新后
观察:
Status Code是from disk cache的,说明并没有发出请求,是从本地缓存拿出的响应
- 静态资源缓存策略
强缓存
Cache-control:一年
允许所有域名访问
资源类型:css
- 静态资源部署方案
方案:缓存+CDN+文件名hash
当文件名变的时候,文件名会发生变化,使得用户能访问新的资源
CDN:Content Delivery Network
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
登录
-
业务场景:表单登录、扫码登录
-
技术方式:SSO
-
登录页面
过滤方案
-
为什么会出现options请求? ————跨域cross-origin
-
什么叫跨域请求?
scheme,host name,port有任何一处不同,都叫做跨域请求
same-origin:同域请求
cross-origin:跨域请求
例子:
注:最后一行没有标注端口号,但https的默认端口号为443,故也是同域请求
- 跨域请求解决方案 1.CORS
2.代理服务器
跨域问题:浏览器的安全策略和同源策略,通过代理服务器绕开这些拒绝可解决问题
同源策略是浏览器的,不是HTTP的
- 分析登录操作
1.向地址栏做了什么动作?
使用POST方法
目标域名:https://sso.toutiao.com
目标path/quick_login/v2/
2.携带了哪些信息?返回了哪些信息?
- 携带信息 Post body,数据格式为form
希望获取的数据格式为json
已有的cookie
- 返回信息
数据格式json
种cookie的信息
- 下一次为什么能记住登录态?
单点登录:SSO(Single Sign On)
04 实战
浏览器篇
1.AJAX之XHR
2.AJAX之Fetch
- XMLHTTPRequest的升级版
- 使用Promise
- 模块化设计,Response,Request,Header对象
- 使用数据流处理对象,支持分块读取
node篇
1.标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
2.常用的请求库:axios
-
支持浏览器,nodejs环境
-
丰富的浏览器
用户体验
1.网络优化
2.预解析、预连接
3.稳定性
- 重试是保证稳定的有效手段,但要防止加剧恶劣情况
- 缓存合理使用,作为最后一道防线
05 扩展
通信方式
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL使用
ws://或wss://等开头