这是我参与「第四届青训营 」笔记创作活动的的第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按照下面的顺序找到这个对应的域名:
- 浏览器缓存:看看之前有没有访问过这个域名,浏览器会按照一定的频率缓存 DNS 记录。
- 系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中找。
- 路由器缓存:电脑可能换了,不过路由器也有 DNS 缓存。
- ISP 的 DNS 服务器:ISP 是互联网服务提供商的简称(就是中国移动、中国电信啥的),ISP 有专门的 DNS 服务器应对 DNS 查询请求。
- 根服务器: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树...最后才呈现完整页面到我们面前
如有不对之处,欢迎之处