通用技术 请求 www.baidu.com 背后的故事

约翰 · 2020年12月16日 · 最后由 Mango 回复于 2021年01月12日 · 2806 次阅读

当你在浏览器地址栏敲下:www.baidu.com,点击回车键后,其实背后有一系列动作:
1.首先会查找浏览器缓存,是否有 www.baidu.com 缓存内容,如果有,直接返回缓存中内容到客户端;
如果缓存中不存在,则进行下一步查找操作;
2.请求 DNS 服务器,将域名解析为:IP,来查找是否包含服务器,如果不包含,继续向上一层级的 DNS 服务器请求,直至找到对应 IP 的服务器;
3.当浏览器拿到对应域名的 IP 后,会与服务器通过 TCP 协议建立三次握手;
4.服务器获取请求报文中的资源 web 服务器,或是动态生成资源,放到服务器端特定的目录;
5.服务器构建响应报文,包括:状态码、响应首部以及响应主体;
6.服务器发送响应报文给客户端;
7.客户端接收到服务器响应后,调用 css、js 以及图片等资源渲染出页面数据进行展示;

共收到 10 条回复 时间 点赞

一开始是解析域名吧,浏览器先查 dns 缓存而不是 web 文件的缓存

根据网上资料 +web 开发口述整理的一份资料:
1、首先会对 URL 进行解析,分析所需要使用的传输协议和请求的资源的路径。如果输入的 URL 中的协议或者主机名不合法,将会把地址栏中输入的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了非法字符,如果存在非法字符,则对非法字符进行转义后再进行下一过程。
2、获取输入的 URL 中的域名的 IP 地址。判断本地是否有该域名的 IP 地址的缓存,如果有则使用,如果没有则向【本地 DNS 服务器】发起请求。本地 DNS 服务器也会先检查是否存在【缓存】,如果没有就会先向【根域名服务器】发起请求
3、获得负责的【顶级域名服务器】的地址后,再向【顶级域名服务器】请求,然后获得负责的【权威域名服务器】的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后
4、本地 DNS 服务器再将这个 IP 地址返回给请求的用户
5、当浏览器得到 IP 地址后,数据传输还需要知道目的主机 MAC 地址。(因为应用层下发数据给【传输层】,TCP 协议会指定【源端口号和目的端口号】,然后下发给【网络层】。网络层会将【本机地址】作为源地址,获取的 IP 地址作为目的地址。然后将下发给【数据链路层】,数据链路层的发送需要加入通信双方的 MAC 地址,我们本机的 MAC 地址作为源 MAC 地址)通过将 IP 地址与我们本机的子网掩码相与,我们可以判断我们是否与请求主机在同一个子网里,如果在同一个子网里,我们可以使用【arp】(地址解析协议) 协议获取到目的主机的 MAC 地址。如果不在一个子网里,那么我们的请求应该转发给我们的【网关】,由它代为转发,此时同样可以通过 ARP 协议来获取网关的 MAC 地址,此时目的主机的 MAC 地址应该为网关的地址。
6、当页面请求发送到服务端后,服务器端会返回一个 html 文件作为响应,浏览器接收到响应后,开始对 html 文件进行 解析,开始页面的渲染过程。
7、浏览器首先会根据 html 文件构建 DOM 树,根据解析到的 css 文件构建 CSSOM 树,如果遇到 script 标签,则判端是否含有【defer】或者【async】属性(这部分不需要懂,不学前端不知道挺正常的),要不然 script 的加载和执行会造成页面的渲染的阻塞。当 DOM 树和 CSSOM 树建立好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进行布局。布局完成后,最后使用浏览器的 UI 接口对页面进行绘制。这个时候整个页面就显示出来了。

约翰 #10 · 2020年12月16日 Author
Mango 回复

😀 👍

  • 如何测试一根笔
  • 如何测试电梯
  • 给你一个播放视频的 app, 你怎么测
  • get/ post 区别
  • http/https 的区别

有意思么?

第一点查浏览器缓存是为了找登录 cookie?还是为了确认自己有没有在该浏览器登录而进行的浏览记录。

hellohell 回复

哈哈,简单事情做好就是不简单,仁者见仁智者见智呗

cloudy 回复

我理解是后者呢,您认为呢?

约翰 回复

那怎么经过中间件,数据库,缓存的 “?

Mango 回复

那什么时候过数据库,中间件呢,什么读写分离

王_test 回复

我这边列出来的主要是 web 侧,服务端的应该就是另一个故事了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册