web浏览器如何生成请求消息?

18 篇文章 1 订阅
9 篇文章 0 订阅


在这里插入图片描述

探索浏览器如何发送接收消息,我们要从在浏览器中点击某个链接开始,浏览器会按照一定的规则去分析这个网址的含义,然后根据其含义生成请求消息,当然,浏览器并不会亲自负责数据的传送。传送消息是搬运数字信息的机制负责的工作,因此浏览器会委托它将数据发送出去。具体来说,就是委托操作系统中的网络控制软件将消息发送给服务器。

本文讲解的知识比较基础,适合小白看,但是想巩固一下基础知识也欢迎跟我一起,探索web浏览器工作原理!

1. 生成Http请求

1.1 输入网址/点击链接

用户在浏览器中输入网址(URL,Uniform Resource Locator,统一资源定位符),接下来,浏览器的工作会从对用户输入的网址进行解析开始。然后,浏览器会根据网址的含义来生成请求消息。浏览器通过请求消息将用户需要哪些数据告知服务器。
什么是网址呢?

1.1.1 网址/URL

网址,准确来说应该叫 URL,如果我说它就是以 http:// 开头的那一串东西,恐怕大家一下子就明白了,但实际上除了“http:”,网址还可以以其他一些文字开头,例如“ftp:”、“file:”、“mailto:” 等。

之所以有各种各样的 URL,是因为尽管我们通常是使用浏览器来访问Web 服务器的,但实际上浏览器并不只有这一个功能,它也可以用来在 FTP 服务器上下载和上传文件,同时也具备电子邮件客户端的功能。可以说,浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的 URL 就是用来干这个的,比如访问 Web 服务器用“http:”开头,而访问 FTP服务器时用“ftp:”,因此,我们可以把这部分理解为访问时使用的访问方法。尽管后面部分的写法各不相同,但开头部分的内容决定了后面部分的写法,因此并不会造成混乱。
在这里插入图片描述

1.1.2 各种格式

在这里插入图片描述

【注意】http://www.baidu.com中的 www 只是 Web 服务器上的一种命名,域名baidu.com被解析的时候选择www之后就可以使用该网址访问百度的服务器IP。而且,World Wide Web 也不是一个协议的名字,而是 Web 的提出者最早开发的浏览器兼 HTML 编辑器的名字。
百度百科上这样写道:

万维网WWW是World Wide Web的简称,也称为Web、3W等。WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过超文本标记语言(HTML)把信息组织成为图文并茂的超文本,利用链接从一个站点跳到另个站点。这样一来彻底摆脱了以前查询工具只能按特定路径一步步地查找信息的限制

【注意】个人可以申请注册互联网中的域名。如果是“.com”、“.net”、“.org”、“.jp”(除“co.jp”、“ne.jp”等“xx.jp”格式的域名外)等没有对注册对象范围进行限制的域名,任何个人都可以申请注册。此外,也有一种“.name”域名是专门为个人申请者准备的。另外中国的个人可以申请“.cn”域名,但“.com.cn”“.net.cn”等域名则是不开放给个人注册的。日本的域名体系中,“.jp”下级的域名用的是两个字母的命名,例如“.co.jp”“.ne.jp”,而中国使用的是三个字母的命名,例如“.com.cn”“.net.cn”。

1.2 解析URL

浏览器要做的第一步工作就是对 URL 进行解析,从而生成请求消息。URL 的格式会随着协议的不同而不同,因此下面以访问 Web 服务器的情况为例。

当对 URL进行解析时,首先需要按照下图的格式将其中的各个元素拆分出来,然后,通过拆分出来
的这些元素,我们就能够明白 URL 代表的含义。例如,www.lab.glasscom.com/dir1/file1.html其中包含 Web 服务器名称 www.lab.glasscom.com,以及文件的路径名 /dir1/file1.html,因此我们就能够明白,这个URL 表示要访问 www.lab.glasscom.com 这个 Web 服务器上路径名为 /dir/file1.html 的文件,也就是位于 /dir/ 目录下的 file1.html 这个文件。
在这里插入图片描述

1.3 省略文件名

有时候我们也会见到一些不太一样的 URL,例如下面这个 URL 是以“/”来结尾的:http://www.lab.glasscom.com/dir/

我们可以这样理解,以“/”结尾代表 /dir/ 后面本来应该有的文件名被省略了。根据 URL 的规则,文件名可以像前面这样省略。不过,没有文件名,服务器怎么知道要访问哪个文件呢?其实,我们会在服务器上事先设置好文件名省略时要访问的默认文件名。这个设置根据服务器不同而不同,大多数情况下是 index.html 或者 default.htm 之类的文件名。因此,像前面这样省略文件名时,服务器就会访问 /dir/index.html 或者 /dir/default.htm

还有一些 URL 是像下面这样只有 Web 服务器的域名的,这也是一种省略了文件名的形式。
http://www.lab.glasscom.com/。这个 URL 也是以“/”结尾的,也就是说它表示访问一个名叫“/”的目录 A。而且,由于省略了文件名,所以结果就是访问 /index.html 或者 /default.htm 这样的文件了。

那么,下面这个 URL 又是什么意思呢?http://www.lab.glasscom.com/,这下连最后的“/”都省略了,像这样连目录名都省略时,真不知道到底在请求哪个文件了,实在有些过分。不过,这种写法也是允许的。当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.htm 这些文件,这样就不会发生混乱了。

不过,下面这个例子就更诡异了。http://www.lab.glasscom.com/whatisthis。前面这个例子中,由于末尾没有“/”,所以 whatisthis 应该理解为文件名才对。但实际上,很多人并没有正确理解省略文件名的规则,经常会把目录末尾的“/”也给省略了。因此,或许我们不应该总是将 whatisthis 作为文件名来处理。一般来说,这种情况会按照下面的惯例进行处理:如果Web 服务器上存在名为 whatisthis 的文件,则将 whatisthis 作为文件名来处理;如果存在名为 whatisthis 的目录,则将 whatisthis 作为目录名来处理。

【注意】“/”目录表示目录层级中最顶层的“根目录”。也许单独一个“/”表示根目录的写法看上去很奇怪,其实只要明白目录的规则就很容易理解了。我们写目录名时会像“dir/”一样在末尾加上一个“/”,这一点大家应该没什么疑问,那么如果目录本身没有名字的话会怎么样呢?在上面的例子中,就相当于“dir/”去掉了其中的 dir,这样一来就只剩下一个“/”了,这就是表示根目录的“/”。对于目录层级最顶层的那个目录,我们出于方便的考虑把它叫作根目录,其实它本身并没有名字,因此我们仅用“/”来表示它。

1.4 HTTP基本思路

解析完 URL 之后,我们就知道应该要访问的目标在哪里了。接下来,浏览器会使用 HTTP 协议来访问 Web 服务器,不过在介绍这一环节之前,先看一下HTTP的原理简易图。
在这里插入图片描述
HTTP 协议定义了客户端和服务器之间交互的消息内容和步骤,其基本思路非常简单。首先,客户端会向服务器发送请求消息。请求消息中包含的内容是"URI"和"方法”两个部分。请求中的各种访问目标统称为 URI(Uniform Resource Identifier,统一资源标识符)。方法表示需要让Web 服务器完成怎样的工作,其中典型的例子包括读取 URI 表示的数据、将客户端输入的数据发送给 URI 表示的程序等。HTTP的主要方法:
在这里插入图片描述
收到请求消息之后,Web 服务器会对其中的内容进行解析,通过 URI和方法来判断“对什么”“进行怎样的操作”,并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。在响应消息的开头有一个状态码,它用来表示操作的执行结果是成功还是发生了错误。

我们生活中经常在访问某个网页时看到404 not found的错误信息,其实这就是状态码。状态码后面就是头字段和网页数据。响应消息会被发送回客户端,客户端收到之后,浏览器会从消息中读出所需的数据并显示在屏幕上。到这里,HTTP 的整个工作就完成了。

1.5 生成HTTP请求消息

对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。实际上,HTTP 消息在格式上是有严格规定的,因此浏览器会按照规定的格式来生成请求消息。

首先,请求消息的第一行称为请求行。这里的重点是最开头的方法,方法可以告诉 Web 服务器它应该进行怎样的操作。如下图,是HTTP的消息格式,浏览器和web服务器根据此格式来生成消息。
在这里插入图片描述
下图:表单中对方法的区分在代码中的表现。

在这里插入图片描述
第一行的末尾需要写上 HTTP 的版本号,这是为了表示该消息是基于哪个版本的 HTTP 规格编写的。到此为止,第一行就结束了。

第二行开始为消息头。尽管通过第一行我们就可以大致理解请求的内容,但有些情况下还需要一些额外的详细信息,而消息头的功能就是用来存放这些信息。消息头的规格中定义了很多项目,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。这些项目表示的都是非常细节的信息,因此要想准确理解这些信息的意思,就需要对 HTTP 协议有非常深入的了解。

写完消息头之后,还需要添加一个完全没有内容的空行,然后写上需要发送的数据。这一部分称为消息体,也就是消息的主体。不过,在使用GET 方法的情况下,仅凭方法和 URI,Web 服务器就能够判断需要进行怎样的操作,因此消息体中不需要填写任何数据。消息体结束之后,整个消息也就结束了。

当使用 POST 方法时,需要将表单中填写的信息写在消息体中。到此为止,请求消息的生成操作就全部完成了。

【注意】在HTML源代码中会在表单的属性中指定是使用哪种方法来发送请求,可能是GET也可能是POST,GET 方法能够发送的数据只有几百个字节,如果表单中的数据超过这一长度,则必须使用 POST 方法来发送。

1.6 发送请求,收到响应

当我们将上述请求消息发送出去之后,Web 服务器会返回响应消息。响应消息的格式以及基本思路和请求消息是相同的,差别只在第一行上。在响应消息中,第一行的内容为状态码和响应短语,用来表示请求的执行结果是成功还是出错。状态码和响应短语表示的内容一致,但它们的用途不同。状态码是一个数字,它主要用来向程序告知执行的结果;相对地,响应短语则是一段文字,用来向人们告知执行的结果。

HTTP状态码的第一位数字表示状态类型,第二、三位数字表示具体的情况。
在这里插入图片描述
返回响应消息之后,浏览器会将数据提取出来并显示在屏幕上,我们就能够看到网页的样子了。如果网页的内容只有文字,那么到这里就全部处理完毕了,但如果网页中还包括图片等资源,会在网页中的相应位置嵌入表示图片文件的标签的控制信息。浏览器会在显示文字时搜索相应的标签,当遇到图片相关的标签时,会在屏幕上留出用来显示图片的空间,然后再次访问 Web 服务器,按照标签中指定的文件名向 Web 服务器请求获取相应的图片并显示在预留的空间中。这个步骤和获取网页文件时一样,只要在 URI 部分写上图片的文件名并生成和发送请求消息就可以了。

HTTP消息示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

2.1 IP地址

请求消息生成之后,浏览器会委托操作系统向 Web 服务器发送请求,但浏览器必须告诉操作系统接收方的 IP 地址才行,因此浏览器必须先查出Web 服务器的 IP 地址。网址中只有 Web 服务器的域名,因此浏览器需要向 DNS 服务器查询域名对应的 IP 地址,在讲解这一操作之前,先来看一下什么是IP地址。

// 2020-10-09 待续…

【注意】发送消息的功能对于所有的应用程序来说都是通用的,因此让操作系统来实现这一功能,其他应用程序委托操作系统来进行操作,这是一个比较合理的做法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Antrn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值