浏览器中输入了网址到网页展现的流程:
1、浏览器的地址栏输入URL并按下回车
2、DNS解析URL对应的IP
3、根据IP地址建立TCP连接
4、HTTP发起请求
5、服务器处理请求,浏览器接受HTTP响应
6、渲染页面,构建DOM树
7、关闭TCP连接
1、输入url
常见的URL是形如:http://www.baidu.com。这个域名由三部分组成:协议名、域名、端口号,这里端口号是默认的端口号80所以隐藏。除此之外,URL还会包含路径、查询和其他片段,例如http://www.leecode-cn.com/problems等。在浏览器中输入网址的时候,浏览器其实可以只能匹配url了,它会从历史记录,书签等地方找到已经输入的字符串可能对应的url,以便于补全url地址。
2、DNS解析URL
由于用户更容易记住形如www.baidu.com的网址的名字,而不是记住它的ip地址。而计算机更容易记住它的ip地址,所以需要进行DNS。
DNS是一个域名系统,是因特网上做为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不需要记住它的ip地址。
DNS查询的两种方式
1)递归解析
2)迭代解析
解析的过程
1)请求一旦发起,浏览器首先就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的hosts文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用hosts文件里面的ip地址。一般hosts路径位于C:\Windows\System32\drivers\etc
2)如果本地的hosts文件没有能够找到对应的ip地址,浏览器会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般是由自己的网络接入服务器商提供,比如中国电信等。
3)查询你输入的网址的DNS请求到达本地DNS服务器后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有这个记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
4)根DNS服务器没有记录具体的域名和ip地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这个过程是迭代的查询的过程。
5)本地DNS服务器继续向域服务器发出请求,若请求的对象是.com域服务器。.com域服务器收到请求后,也不会直接返回域名和ip地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址
6)最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和ip地址对应关系,本地DNS服务器不仅要把ip地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果。
3、根据查询到的ip地址进行建立TCP连接
1)第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器响应。
2)第二次握手:服务器收到syn包,确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
3)客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)发送完毕后进进ESTABLISHED状态,服务器收到这个包后也进入ESTABLISHED状态,三次握手完成。
4、发送HTTP请求
5、服务器处理请求,浏览器接受HTTP响应
服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
状态码主要包括以下部分
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
6、构建DOM树
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了.
webkit的渲染过程:解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树
7、关闭链接