从输入URL到页面加载完成期间经历了什么?
总体分几个过程
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
参考文献:https://segmentfault.com/a/1190000006879700
DNS解析
www.google.com只是为了方便人们记忆,它真正意义上的地址是它的IP地址,每个计算机都有一个独一无二的IP地址,把一个网址转换到IP地址,这个过程就是DNS解析。
DNS解析是一个递归查询的过程
本地域名服务器中查询IP地址===》根域名服务器查询===》com顶级域名查询===》google.com域名服务器
等于以下查询过程:
. -> .com -> google.com. -> www.google.com.
DNS 优化
将查询到的IP地址进行缓存,方便下次查询
DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存
DNS负载均衡
DNS返回的IP地址是否每次都不一样,每次请求的资源不一定位于同一台机器上面。
所以为了解决高性能和储存满足亿万请求,需要成千上百台服务器,大型的网站甚至更多
DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡
TCP连接
拿到IP地址后,浏览器就知道该向哪个服务器发送请求了,这就用到了传输层的TCP协议,TCP是一种面向有连接的传输层协议,建立连接需要进行三次握手才能互相传输数据,在TCP连接建立完成之后就可以发送HTTP请求了
https://blog.csdn.net/qq_42253147/article/details/94389689
发送HTTP请求
HTTP报文是包裹在TCP报文中发送的,服务器端收到TCP报文时会解包提取出HTTP报文。但是这个过程中存在一定的风险,HTTP报文是明文,如果中间被截取的话会存在一些信息泄露的风险。那么在进入TCP报文之前对HTTP做一次加密就可以解决这个问题了。
HTTPS协议的本质就是HTTP + SSL(or TLS)。在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。从网络的层级结构看它位于HTTP协议与TCP协议之间。
- HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。
post和get的区别
1、GET是从服务器上获取数据,POST是向服务器传送数据。
2、在客户端, GET方式在通过URL提交数据,数据在URL中可以看到,不安全;POST方式,数据放置在HTML HEADER内提交,安全
3、对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
4、GET方式提交的数据最多只能有1024字节,而POST则没有此限制
服务器处理请求并返回HTTP报文
HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文
- 状态码
浏览器解析渲染页面
浏览器是一个边解析边渲染的过程,首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。