当前位置: 首页 > 科技观察

从浏览器输入url到发起http请求的过程

时间:2023-03-15 17:24:38 科技观察

用户输入url当用户输入url时,操作系统会将输入事件传递给浏览器。在这个过程中,浏览器可能会做一些预处理,比如Chrome会根据历史统计来估计输入的字符对应的网站。比如你输入goog,发现之前90%的历史都会访问“www.google.com”,所以在输入回车前会立即开始构建TCP连接甚至渲染。然后,输入url后,点击回车。这时候浏览器就会检查这个URL。首先,它会判断协议。内核会先检查缓存,然后设置UA等HTTP信息,然后在不同平台下调用网络请求的方法。注意:浏览器和浏览器内核是不同的概念。浏览器是指Chrome和Firefox,浏览器内核是指Blink和Gecko。浏览器内核只负责渲染,GUI、网络连接等跨平台工作在浏览。服务器实现的http网络请求通过DNS查询IP;通过Socketdns发送数据查询ipDNS,英文是DomainNameSystem,中文叫DomainNameSystem,是互联网的一项服务。是一个分布式的数据库,将域名和IP地址相互映射假设用户在浏览器中输入www.google.com,一般过程:如果输入的是域名,需要进行dns查询来解析域名转化为ip;进行DNS查询的主机或软件称为DNS解析器,用户使用的工作站或计算机为解析器。域名解析就是使用DNS解析器获取对应IP的过程,解析器会查询域名服务器进行处理。主要过程如下:从浏览器缓存中找到域名www.google.com的IP地址。如果在浏览器缓存中没有找到域名www.google.com的IP地址,就会去操作系统缓存中查找。这一步也会搜索本机的hosts,看是否有对应关系如果系统中没有域名映射(当然已经缓存在系统DNS缓存中),去你的路由器上找,因为路由器一般也有自己的DNS缓存。如果以上都没有找到,则继续往下dns域名服务器查询用户电脑的解析器到LDNS(即LocalDNS,InternetServiceProviderISP),发起域名解析请求,查询到的IP地址www.google.com。这是一个递归搜索过程。*号表示LDNS向根域名服务器查询www.google.com的IP地址。LDNS的查询过程是一个迭代的查询过程。root告诉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地址返回给LDNSLDNS在本地缓存一条记录,结果返回给用户的解析器电脑。之后,用户电脑的解析器得到结果,缓存在自己操作系统的DNS缓存中,同时返回给浏览器,浏览器还会缓存一段时间。注意域名查询可能会经过CDN调度器(如果有cdn存储功能的话)。而且要知道dns解析是比较耗时的,所以如果解析的域名太多,首屏加载会变得很慢,可以考虑dns-prefetch来优化tcp/ip请求。有了IP地址,就可以通过SocketAPI发送数据了。这时候,你可以选择TCP或者UDP协议。http的本质是tcp协议。TCP是面向连接的传输层协议。可以保证通信主机之间的两端(发送端和接收端)之间的通信可达。可以处理传输过程中丢包、传输顺序乱序等异常情况;此外,它还可以有效地利用宽带来缓解网络拥塞。TCP连接的建立一开始需要三次握手:第一次握手,请求建立连接,发送方发送连接请求报文,第二次握手,接收方收到发送方发送的报文。可见发送方需要建立连接。然后接收端会发送消息给发送端进行第三次握手。发送端收到发送的消息后,需要检查返回的内容是否正确;建立完成后,就可以发送HTTP请求了。注意浏览器对同一个域名的连接数有限制,大多数是6个。在http1.0中,一个资源下载往往需要对应一个tcp/ip请求,而像HTTP2.0这样的协议只使用一个TCP连接传输数据,但是性能更好,也可以实现请求优先级。