输入网址到页面展示发生了什么 | 青训营笔记

127 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第7天。

今天接着介绍一些关于HTTP的知识。

感兴趣的可以看看我之前的文章:红包算法之如何助你抢到大红包 | 青训营笔记 - 掘金 (juejin.cn)

什么是HTTP

http是用于从万维网服务器传输超文本到本地浏览器的传送协议。当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信的协议就是HTTP协议。

输入网址到访问发生了什么

  • 检查地址有效性

对于浏览器来说,一般可以支持两种地址的输入:IP(192.xxx.xxx.xxx)直接访问和通过域名 www.xxx.com 访问。在你输入一个地址后,浏览器最先做的就是检查你的地址是否“合法”。譬如,用IP的时候有超过255的数字、域名中有非法字符等。只有当你正确输入一个地址,浏览器才会按照你的指令进行以下步骤。否则,(现在的)浏览器会认为你想在搜索引擎中搜索这段字符串。

  • 解析URL

url被称为统一资源定位符,用来表示从互联网上得到的资源位置和访问这些资源的方法。

一般表示为: <协议>://<主机>:<端口>/<路径>

比如我们启动一个本地servlet程序: http://localhost:8080/testServlet/login.html
localhost:代表的是我们本机的IP地址
8080:代表我们的端口号
testServlet/login.html :代表的是我们的路径。

  • 地址查询 —— DNS

输入网址之后,DNS按照下面的顺序找到这个对应的域名:

  1. 浏览器缓存:看看之前有没有访问过这个域名,浏览器会按照一定的频率缓存 DNS 记录。
  2. 系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中找。
  3. 路由器缓存:电脑可能换了,不过路由器也有 DNS 缓存。
  4. ISP 的 DNS 服务器:ISP 是互联网服务提供商的简称(就是中国移动、中国电信啥的),ISP 有专门的 DNS 服务器应对 DNS 查询请求。
  5. 根服务器:ISP 的 DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS 服务器先问根域名服务器.com 域名服务器的 IP 地址,然后再问.baidu 域名服务器,依次类推
  • TCP/IP连接

当拿到域名对应的IP地址之后,浏览器会以一个随机端口向服务器的WEB程序的80/443端口发起TCP的连接请求这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

  • 发送HTTP请求

TCP 三次握手结束后确认数据传输可靠后,开始发送 HTTP 请求报文。

  • 服务器处理请求,返回HTTP响应

后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,先是处理以太网头部,再到IP头部、TCP头部,最后到HTTP数据。

当服务器收到我们的请求之后,他会生成一个响应,以响应报文的形式返回客户端,这里与请求发出的过程类似

  • 浏览器渲染页面并展现

当客户端拿到响应文本经过层层解析,最终浏览器拿到HTML响应报文后,便开始渲染页面,渲染页面也要先解析HTML标签,构建DOM树...最后才呈现完整页面到我们面前


如有不对之处,欢迎之处