输入URL地址到最终页面渲染完成,发生了什么事

1.url输入回车

2.DNS解析 -> 解析什么?变成什么

      URL          相对服务器的IP地址

           代理服务器的IP地址

3.浏览器网络向相应服务器发送TCP/IP连接请求   

   三次握手

4.建立TCP/IP连接

5.浏览器网络发起HTTP请求

6.等待 响应过程 wariting

7.下载HTML资源

8.解析HTML

9. 遇到HTML里的资源,再次发起HTTP请求,下载资源

   四次挥手

10.时间线

11.呈现页面

 

 

 

 

 

 

 

 

 

 

 

1. 域名DNS解析

  - 浏览器DNS缓存

  - 系统DNS缓存

  - 路由器DNS缓存

  - 网络运营商DNS缓存

  - 递归搜索......

2. TCP连接: TCP三次握手

  - 第一次握手,由浏览器发起,告诉服务器我要发送请求了

  - 第二握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧

  - 第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧

3. 发送请求

  - 请求报文:HTTP协议的通信内容

4. 接受响应

  - 响应报文

5. 渲染页面

  (1.解析html内容 产生dom树 2. 解析css产生css Rule Tree 3.DOM和CSSOM合并后的render Tree 4.浏览器计算layout 开始渲染)

 

http 常见的状态码

400的错误是由于发送请求参数没有成功
原因:参数名称类型没有对上;或者参数格式不正确

 

 

204  代表响应报文中包含若干首部和一个状态行,但是没有实体的主体内容 (没有body内容)

400  前后端json对象中的属性名与后端接收请求的实体类的属性名不对应 (前后端数据传递没对应上)。请求报文存在语法错误

401  发送的请求需要有通过HTTP认证的信息

403   表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述

 

200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
202: '一个请求已经进入后台排队(异步任务)。',
204: '删除数据成功。',
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
401: '用户没有权限(令牌、用户名、密码错误)。',
403: '用户得到授权,但是访问是被禁止的。',
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
406: '请求的格式不可得。',
410: '请求的资源被永久删除,且不会再得到的。',
422: '当创建一个对象时,发生一个验证错误。',
500: '服务器发生错误,请检查服务器。',

501:服务器不支持当前请求所需要的某个功能
502: '网关错误。',
503: '服务不可用,暂时处于超负载或正在停机维护,无法处理请求',
504: '网关超时。',

 

通用首部                     作用 (请求报文和响应报文都可能使用)

Cache-Control            控制缓存的行为: no-cache(强制向服务器再次验证)   no-store(不做任何缓存)       max-age=11111(资源可缓存最大时间  秒)          

           public (客户端、代理服务器都可利用缓存)   private (代理服务器不可用缓存)

Connection                浏览器想要优先使用的链接类型: keep-alive  close 开启和关闭持久连接

Date                         创建报文时间

Pragma                     只用于请求报文,客户端要求中间服务器不返回缓存的资源

Via                           代理服务器相关信息,没经过一个代理服务器就会添加相关信息,用逗号分割

Transfer-Encoding     传输编码方式: chunked分块传输

Upgeade                   要求客户端使用的升级协议,需配合Connection:Upgrade一起使用:websocket

Warning                     缓存相关问题的警告

 

请求首部                   作用(请求报文专用)

Accept                     能正确接收的媒体类型: application/json   text/plain

Accept-Encoding      能正确接收的字符集: unicode  gzip deflate

Authorization            客户端认证信息:Bearer dasfasfa123,一般存token 用

Cookie                     发送给服务器的Cookie信息

Expect                     期待服务器的指定行为

Host                       服务器的域名,用于区分单台服务器多个域名的虚拟主机,是HTTP/1.1唯一必须包含的字段

User-Agent             客户端信息

Referer                    请求发起页面的原始URL

TE                          传输编码方式

 

---------------------------------------------------------

ajax的open()方法有3个参数
1 method (get / post) 
2 url
3 boolean (默认是异步 true)

当该boolean值为true时,服务器请求是异步进行的,也就是脚本执行send方法后不等待服务器的执行结果,而是继续执行脚本代码

当该boolean值为false时,服务器请求是同步进行的,也就是脚本执行send方法后等待

---------------------------------------------------------

 

预先加载

1.DNS预取

2.资源预取

3.TCP preconnect

 

 

如何提高加载速度

1.合并请求:nginx模块,sprite雪碧图

2.缓存:from cache(memory disk),localStorage,本地缓存策略,HTTP头(结合业务)

3.tcp网络连接优化,tcp调优,HTTP/2,keep-alive

4.硬件:加大带宽,使用cdn(对象存储)

5.资源大小:gzip,webp,image压缩,cookie体积

6.预加载:多个cdn域名,dns预取,异步读取js

 

posted @ 2019-02-11 17:11  慕斯undefined  阅读(538)  评论(0编辑  收藏  举报