深入理解浏览器工作原理

1.生成HTTP请求消息

探索从输入网址开始

当用户输入网址(即URL)后,浏览器第一步是解析URL。

&&网址,准确的说是URL,全称:统一资源定位符。
浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要一些东西来判断应该使用其中的哪种功能来访问所需要的数据,URL就是干这个东东的。【URL类型的多样性】

在这里插入图片描述
浏览器解析完URL后,浏览器就会使用HTTP协议来访问Web服务器了。

下面来了解一下HTTP协议

HTTP协议定义了客户端与服务器之间交互的消息内容和步骤,客户端请求内容主要是“对什么”(URI)和“进行怎么的操作”两个部分。
对于“进行怎么的操作”,下图是主要方法;
在这里插入图片描述
浏览器通过请求消息“对什么”和“怎么做”完成自己的工作后,将结果放在响应消息中。
在响应消息的开头有一个状态码,它表示执行操作的结果是成功还是错误。例如我们平时偶尔碰见的404Not Found就是状态码。
状态码后面就是头字段和网页数据,然后浏览器就会读出所需要的数据,接着显示在屏幕上。这就基本上是HTTP的整个工作了。

接着研究浏览器在对URL解析确定了Web服务器和文件名后,如何生成HTTP请求消息

如何生成HTTP请求消息

HTTP消息格式如下图
在这里插入图片描述
第一行我们可以大致理解成请求的内容,但有些情况需要一些额外的详细信息(比如日期,客户端支持的数据类型,语言,压缩格式等等),于是有了第二行的消息头。

Web服务器返回响应消息

格式和请求消息大致相同,差别只在第一行,在响应消息中,第一行为状态码和响应短语。(状态码和响应短语其实是一个一个意思,只是用途不一样,一个是数字,给机器看的,一个是文字,给人看的)

注意:每条请求消息中只能写一条URI,所以对于要获取多个文件(如网页中包含很多图片时),必须对每个文件都单独发送一条请求。

2.向DNS服务器查询Web服务器的IP地址

在网络世界中的通信,要使用到的地址是IP地址,又因为IP地址很长,不好记忆,于是有了域名系统。但TCP/IP网络是只认IP地址的,于是就引出了域名到IP地址的转换。

Socket库提供查询IP地址的功能

应该都知道,查询IP地址就是询问DNS服务器。
向DNS服务器发出查询的前提是我们计算机上有相应的DNS客户端,而这种客户端叫做DNS解析器。它本质上是一个程序,包含在操作系统的的Socket库中。
Socket库是用于调用网络功能的程序组件集合。

在这里插入图片描述

3.全世界DNS服务器大接力

DNS服务器的基本工作,如图
在这里插入图片描述
记录类型:表示域名对应的何种类型。例如,当类型为A时,表示域名对应的是IP地址。当类型为MX时,表示域名对应的是邮件服务器。

分级的域名

一般从左往右等级递增,最右边最高级。
(1) 根服务器
根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有顶级域名服务器的域名和ip。根域名服务器一版情况下不会把待查询的域名直接转换IP,而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
(2)顶级域名服务器
顶级域名服务器管理在该顶级域名服务器注册的所有二级域名,但受到DNS查询就会有相应应答。(可能是给出最后的结果或下一步一应当找的域名服务器ip)
(3)权限域名服务器
可以理解为二级域名下 负责一个区的域名服务器、如abc.com和y.abc.com应各设有一个权限域名服务器。
PS: 这里感觉有理解有点误差,在阿里云上买了某个域名abc.com 后面的三级域名都是可以自己设置的,如果访问量较小,整个abc.com仅一个区。下面的y.abc.com和 a.abc.com应该是公用的同一个权限域名服务器。
(4)本地域名服务器
本地域名服务器并不属于3.1域名服务器图中的层级结构,但对域名系统非常重要。但一台主机发出DNS请求时就是发给本地域名服务器。
每一个因特网服务提供ISP(电信联通移动),或一个大学都可以拥有一个本地域名服务器。这种服务器有时也被称为默认域名服务器。本地域名服务器一般离用户较近,一般不超过几个路由的距离。如果要查询的IP同属一个本地ISP时即可直接返回结果地址ip。

查找DNS服务器,

如下图
在这里插入图片描述
&&通过缓存加快DNS服务器响应,DNS服务器有个缓存功能,设置一个有效期,过期后就会从缓存中删除。

4.委托协议栈发送消息

知道了IP地址之后,就可以委托操作系统内部的协议栈发送消息了。

使用Socket库收发消息过程

在这里插入图片描述
具体过程是这样的:(操作系统协议栈做的事情)
首先,服务器一方先创建套接字,然后等待客户端向该套接字连接管道。(服务器程序一般会在启动后就创建好套接字并等待客户端连接管道)接着,客户端也会先创建一个套接字,然后从该套接字延伸出管道,最后管道连接到服务器的套接字上,通信准备就完成了。
收发数据结束后,任意一方断开管道,双方删除套接字。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值