1初识HTTP
浏览器工作原理:
用户输入—浏览器进程:处理输入信息—浏览器内核:发出请求,出去响应,渲染—页面加载
即超文本传输协议;
应用层协议,基于TCP协议;
请求 响应;
简单无扩展;
无状态;
2 协议分析
发展:
单行协议:HTTP/0.9(基础协议);
构建可扩展性:HTTP/1.0;
标准化协议:HTTP/1.1;
更优异的表现:HTTP/2;
草案:HTTP/3;
报文:
以HTTP1.1为例:
请求----响应:标题栏(header)
Get:请求资源的表现形式,主要用于获取数据;
Post:用于指定资源的提交;
PUT:已有载体的替换;
Delete:删除指定资源;
Head:请求一个与GET请求相同的响应,但没有响应体;
Connect:建立一个从资源到服务器的隧道;
Options:描述资源的通信选项;
Trace:沿着到目标资源的路径执行一个消息环回测试;
Patch:对资源应用部分修改;
Method:
Safe(安全的):不会修改服务器数据的方法;
GET、HEAD、OPTIONS
Idempotent(幂等):同样的请求被执行多次与一次的效果是一样的,服务器状态也一样,所有的safe方法都是Idempotent的;
GET、HEAD、OPTIONS、PUT、DELETE
3场景分析
以今日头条为例:
静态资源:
状态码:发出请求
缓存策略:强缓存—一年
允许所有域名访问;
资源类型:CSS;
静态资源方案:缓存+CDN+文件名hash
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式位用户的请求提供服务;
登录:
业务场景:
表单登录,扫码登陆;
技术方式:
SSO;
打开控制台—Network—勾选preseve log—过滤quick_login;
观察请求:options请求:跨域
跨域:
预请求:获知服务端是否与许该跨域请求(复杂请求);
相关协议头:决定是否允许的策略、要求等;
跨域解决方案:
CORS;
代理服务器:
同源策略是浏览器的安全策略,不是HTTP的;
Iframe:诸多不便;
鉴权方案:
Session+cookie;
JWT(JSON web token);
SSO:单点登录(Single Sign On);
4 实战
浏览器:
AJAX之XHR:
readState:
0 UNSENT:代理被创建,但是尚未调用OPEN()方法;
1OPENED:open()方法被调用;
2HEADERS_RECEIVED:send()方法已经被调用,并且头部和状态已经可以获得;
3LOADING:下载中;responseText属性已经包含部分数据;
4DONE:下载操作完成;
AJAX之Fetch:
XMLHttpRequet的升级版;
使用Promise;
模块化设计,Response、Request、Header对象;
通过数据流处理对象,支持分块读取;
Node:
标准库:HTTP/HTTPS;
默认模块,无需安装其他依赖;
功能有限/不是十分友好;
常用请求库:axios;
支持浏览器、nodejs环境;
丰富的拦截器;
用户体验:
网络优化:
http2,CDN动态加速,DNS预解析,网络预连接,
稳定性:
重试机制,缓存,数据安全;
5了解更多
浏览器与服务器进行双工通讯的网络技术;
典型场景:实时性要求高,例如聊天室;
扩展:QUIC
O-RTT建联;类似TCP的可靠传输;