浏览器输入url到提议http要求所阅历的历程

用户输入url

当用户输入url,操作体系会将输入事宜通报到浏览器中,在这历程当中,浏览器可以会做一些预处置惩罚,比方 Chrome 会依据汗青统计来预估所输入字符对应的网站,比方输入goog,依据之前的汗青发明 90% 的几率会接见「www.google.com 」,因而就会在输入回车前就立时最先竖立 TCP 链接以至衬着了。

接着是输入url以后,点击回车,这时候浏览器会对 URL 举行搜检,起首推断协定,假如是 http 就根据 Web 来处置惩罚,别的还会对这个 URL 举行平安搜检

平安搜检完成以后,在浏览器内核中会先检察缓存,然后设置 UA 等 HTTP 信息,接着挪用差别平台下收集要求的要领。

注重:
浏览器和浏览器内核是差别的观点,浏览器指的是 Chrome、Firefox,而浏览器内核则是 Blink、Gecko,浏览器内核只担任衬着,GUI 及收集衔接等跨平台事情则是浏览器完成的

http收集要求

经由历程 DNS 查询 IP;
经由历程 Socket 发送数据

dns查询ip

DNS,英文是Domain Name System,中文叫域名体系,是Internet的一项效劳,他将域名和IP地点互相映照的一个分布式数据库

假定用户在浏览器中输入的是www.google.com,也许历程:

假如输入的是域名,则须要举行dns查询,将域名剖析成ip;

举行DNS查询的主机或软件叫做DNS剖析器,用户运用的事情站或电脑都属于剖析器。域名剖析就是应用DNS剖析器获得对应IP历程,剖析器会向域名效劳器举行查询处置惩罚。

重要历程以下:

  1. 从浏览器缓存中查找域名www.google.com的IP地点
  2. 在浏览器缓存中没找到,就在操作体系缓存中查找,这一步中也会查找本机的hosts看看有无对应的域名映照(固然已缓存在体系DNS缓存中了)
  3. 在体系中也没有的话,就到你的路由器来查找,因为路由器平常也会有本身的DNS缓存

假如以上都没有找到,则继承往下向dns域名效劳器查询

  • 用户电脑的剖析器向LDNS(也就是Local DNS,互联网效劳提供商ISP),提议域名剖析要求,查询www.google.com的IP地点,这是一个递归查找历程
  • 在缓存没有掷中的情况下,LDNS向根域名效劳器.查询www.google.com的IP地点,LDNS的查询历程是一个迭代查询的历程
  • 根通知LDNS,我不晓得www.google.com对应的IP,然则我晓得你可以问com域的受权效劳器,这个域归他管
  • LDNS向com的受权效劳器问www.google.com对应的IP地点
  • com通知LDNS,我不晓得www.google.com对应的IP,然则我晓得你可以问google.com域的受权效劳器,这个域归他管
  • LDNS向google.com的受权效劳器问www.google.com对应的IP地点
  • google.com查询本身的ZONE文件(也称地区文件纪录),找到了www.google.com对应的IP地点,返回给LDNS
  • LDNS当地缓存一份纪录,把效果返回给用户电脑的剖析器
  • 在这以后,用户电脑的剖析器拿到效果后,缓存在本身操作体系DNS缓存中,同时返回给浏览器,浏览器依旧会缓存一段时间。

注重
域名查询时有多是经由了CDN调理器的(假如有cdn存储功用的话)

而且,须要晓得dns剖析是很耗时的,因而假如剖析域名过量,会让首屏加载变得过慢,可以斟酌dns-prefetch优化

tcp/ip要求

有了 IP 地点,就可以经由历程 Socket API 来发送数据了,这时候可以挑选 TCP 或 UDP 协定。

http实质是tcp协定。

TCP是一种面向有衔接的传输层协定。他可以保证两头(发送端和吸收端)通讯主机之间的通讯可达。他可以处置惩罚在传输历程当中丢包、传输递次乱掉等异常情况;另外他还能有用应用宽带,减缓收集拥堵。

竖立TCP衔接一最先都要经由三次握手:

第一次握手,要求竖立衔接,发送端发送衔接要求报文

第二次握手,吸收端收到发送端发过来的报文,可知发送端现在要竖立联机。然后吸收端会向发送端发送一个报文

第三次握手,发送端收到了发送过来的报文,须要搜检一下返回的内容是不是是准确的;若准确的话,发送端再次发送确认包

在TCP衔接竖立完成以后就可以发送HTTP要求了。可以将数据发送给效劳器,并收到返回信息。

当要求完毕,须要经厉衔接停止协定(四次挥手)。

因为TCP衔接是全双工的,因而每一个方向都必须零丁举行封闭。这原则是当一方完成它的数据发送使命后就可以发送一个FIN来停止这个方向的衔接。收到一个 FIN只意味着这一方向上没有数据活动,一个TCP衔接在收到一个FIN后仍能发送数据。起首举行封闭的一方将实行主动封闭,而另一方实行被动封闭。

笼统为:

客户端:我已封闭了向你那里的主动通道了,只能被动吸收了

效劳端:收到通道封闭的信息

效劳端:那我也通知你,我这边向你的主动通道也封闭了

客户端:末了收到数据,以后两边没法通讯

注重
浏览器对同一个域名有衔接数限定,大部分是 6,http1.0中每每一个资本下载就须要对应一个tcp/ip要求,而像 HTTP 2.0 协定只管只运用一个 TCP 衔接来传输数据,但机能反而更好,而且还能完成要求优先级。

参考文章:
http://fex.baidu.com/blog/201…
https://blog.csdn.net/dojiang…
https://segmentfault.com/a/11…

    原文作者:jianwenjuan
    原文地址: https://segmentfault.com/a/1190000017053582
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞