初识HTTP协议 | 青训营

125 阅读3分钟

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的可靠传输;