文章目录
一、输入URL后会发生什么?
1、用户输入关键词,地址栏判断是搜索内容还是url地址。
- 如果是搜索内容,会使用浏览器默认搜索引擎加上搜索内容合成url;
- 如果是域名会加上协议(如https)合成完整的url。
2、DNS解析
准备IP地址和端口:进行DNS解析时先查找缓存,没有再使用DNS服务器解析,查找顺序为:
浏览器缓存–>本机缓存–>hosts文件–>路由器缓存–>ISP DNS缓存–>DNS递归查询| DNS迭代查询
- DNS递归查询
- DNS迭代查询
3、建立tcp连接
成功建立了TCP连接后,就可以开始数据传送
4、客户端发送HTPP请求
一个典型的 http request header 一般需要包括请求的方法,例如 GET 或者 POST 等,不常用的还有 PUT 和 DELETE 、HEAD、OPTION以及 TRACE 方法,一般的浏览器只能发起 GET 或者 POST 请求。客户端向服务器发起http请求的时候,会有一些请求信息,请求信息包含三个部分:
- 方法URL议/版本
- 请求头(Request Header):请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等
- 请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息。
5、服务器处理请求
后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。
一些大一点的网站会将你的请求到反向代理服务器中,因为当网站访问量非常大,网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
此时,客户端不是直接通过HTTP协议访问某网站应用服务器,而是先请求到Nginx,Nginx再请求应用服务器,然后将结果返回给客户端,这里Nginx的作用是反向代理服务器。同时也带来了一个好处,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
6、服务器响应请求
这一步,它会把它的处理结果返回,也就是返回一个HTPP响应。HTTP响应与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
- 状态行
协议版本:是用http1.0还是其他版本
状态代码:状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。如下:
1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。
2xx:成功状态码,表示服务器已成功接收到请求并进行处理。
3xx:重定向状态码,表示服务器要求客户端重定向。
4xx:客户端错误状态码,表示客户端的请求有非法内容。
5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。
状态描述:状态描述给出了关于状态代码的简短的文字描述。比如状态代码为200时的描述为 ok - 响应头(Response Header)
响应头部:由关键字/值对组成,每行一对,关键字和值用英文冒号":"分隔。 - 响应正文:包含着我们需要的一些具体信息,比如cookie,html,image,后端返回的请求数据等等。
响应正文和响应头之间有一行空格,表示响应头的信息到空格为止,
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
7、tcp连接断开
请求结束,当通用首部字段Conection不是Keep-Alive时,即不为TCP长连接时,通过四次挥手断开TCP连接:
- 第一次:客户端(主动断开连接)发送数据包给服务器,其中标志位FIN=1,序号位seq=u,并停止发送数据;
- 第二次:服务器收到数据包后,由于还需传输数据,无法立即关闭连接,先返回一个标志位ACK=1,序号seq=v,确认号ack=u+1的数据包;
- 第三次:服务器准备好断开连接后,返回一个数据包,其中标志位FIN=1,标志位ACK=1,序号seq=w,确认号ack=u+1;
- 第四次:客户端收到数据包后,返回一个标志位ACK=1,序号seq=u+1,确认号ack=w+1的数据包。
8、浏览器展示html
1、准备渲染进程
- 浏览器进程检查当前url是否与之前打开了渲染进程的页面的根域名相同,如果相同,则复用原来的进程,如果不同,则开启新的渲染进程;
2、提交文档
- 渲染进程准备好后,浏览器向渲染进程发起“提交文档”的消息,渲染进程接收到消息后与网络进程建立传输数据的“管道”
- 渲染进程接收完数据后,向浏览器发送“确认提交”
- 浏览器进程接收到确认消息后更新浏览器界面状态:安全状态、地址栏url、前进后退的历史状态、更新web页面
3、在渲染阶段通过渲染流水线在渲染进程的主线程和合成线程配合下,完成页面的渲染