美文网首页饥人谷技术博客
从输入url到页面展现的经历了什么?

从输入url到页面展现的经历了什么?

作者: andreaxiang | 来源:发表于2017-03-31 21:54 被阅读0次

    从输入url到页面展现的过程经历了什么?

    简写版:

    • 输入url
    • 域名解析
    • 发起TCP的3次握手
    • 建立TCP连接后发起http请求 --> -服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
    • 浏览器对页面进行渲染呈现给用户
    • 传输完成,四次挥手结束。

    详细版:

    1,在浏览器输入URL

    URL:统一资源定位符,用于定位互联网上的资源。
    url对应有协议、域名、端口号。
    协议是从该计算机获取资源的方式,常见的协议有:http,https,ftp,file;不同协议有不同的通讯内容格式;

    2,域名解析

    首先,浏览器会解析输入URL的域名去查找对应的IP地址

    域名解析流程:

    2.1 浏览器缓存

    首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有与输入域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。

    2.2 DNS缓存

    如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束.

    2.3 路由器缓存

    如果在系统DNS缓存也没有找到,那么尝试读取系统hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。

    2.4 ISP DNS缓存

    如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向
    本地配置的首选DNS服务器(一般是电信运营商提供的)发起域名解析请求,(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。

    2.5 如果仍没有找到对应的条目,则由运营商的DNS代浏览器发起迭代DNS解析请求,直到找到对对应IP地址

    1.首先 是找到根域的DNS的IP地址,向其发起请求:(请问www.xxxxxx.com这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址;

    2.然后 com域的IP地址发起了请求:(请问www.xxxxxx.com这个域名的IP地址是多少啊?),com域这台服务器告诉运营商的DNS我不知道www.xxxxxx.com这个域名的IP地址,但是我知道xxxxxx.com这个域的DNS地址,你去找它要IP地址去;

    3.于是运营商的DNS又向xxxxxx.com这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求:(请问www.xxxxxx.com这个域名的IP地址是多少啊?),这个时候xxxxxx.com域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器;

    这个时候运营商的DNS服务器就拿到了www.xxxxxx.com这个域名对应的IP地址,并返回给操作系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.xxxxxx.com对应的IP地址,进行下一步操作。

    3.浏览器向web服务器发起TCP 连接请求

    拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)向WEB服务器发起TCP的连接请求:发起TCP的3次握手。

    4.建立TCP连接后发起http请求

    经过TCP 3次握手之后,浏览器会通过tcp连接向远程服务器发送 HTTP 的 GET请求。

    5.服务器端响应http请求,浏览器得到html代码

    服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。

    6.浏览器解析html代码,并请求html代码中的资源

    浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序。
    HTML字符串被浏览器接受后,就会被一句句读取解析
    解析到link标签后,重新发送请求获取css
    解析到script标签后发送请求获取js
    解析到img标签后发送请求获取图片资源等

    7.浏览器对页面进行渲染呈现给用户

    浏览器根据html和css计算得到渲染树,绘制到屏幕上,js会被执行。

    8.传输完成,断开连接

    4次挥手断开

    相关文章

      网友评论

        本文标题:从输入url到页面展现的经历了什么?

        本文链接:https://www.haomeiwen.com/subject/rqfbottx.html