web网页向cgi发送post请求并返回数据_网络是怎样连接的(1)--生成 HTTP 请求消息(1)...

  • 第 1 部分 生成 HTTP 请求消息
    • 1.1 探索之旅从输入网址开始
    • 1.2.浏览器先要解析 URL
    • 1.3. HTTP 的基本思路
      • (1)GET 方法
      • (2)POST 方法

最近阅读了《网络是怎样连接的》一书,作者是日本人户根勤,写的简单易懂,非常适合新手阅读,下面是这本书一些精彩内容的剪切,相当于一个阅读笔记吧,有兴趣的,建议购买实体书阅读

9ee1b9afa7dbf1aa08f2d516b10dc87b.png

第 1 部分 生成 HTTP 请求消息

1.1 探索之旅从输入网址开始

我们的探索之旅从在浏览器中输入网址开始。网址,准确来说应该叫 URL。常见的网址开头有:http:、ftp:、file:、mailto:等等。之所以有各种各样的 URL,是因为尽管我们通常是使用浏览器来访问 Web 服务器的,但实际上浏览器并不只有这一个功能,它也可以用来在 FTP 服务器上下载和上传文件,同时也具备电子邮件客户端的功能。可以说,浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的 URL 就是用来干这个的,比如访问 Web 服务器时用 “http:”,而访问 FTP 服务器时用“ftp:”等。下图列举了互联网中常见的几种 URL, 根据访问目标的不同, URL 的写法也会不同。例如在访问 Web 服务器和 FTP 服务器时,URL 中会包含服务器的域名和要访问的文件的路径名等,而发邮件的 URL 则包含收件人的邮件地址。此外,根据需要, URL 中还会包含用户名、密码、服务器端口号等信息。

2ac6dfd972d4e9c639f777bc5ff9c417.png

1.2.浏览器先要解析 URL

浏览器要做的第一步工作就是对 URL 进行解析,从而生成发送给 Web 服务器的请求消息。URL 的格式会随着协议的不同而不同,因此下面我们以访问 Web 服务器的情况为例进行讲解。根据 HTTP 的规格, URL 包含图 1.2(a)中的几种元素。当对 URL 进行解析时,首先需要按照图 1.2(a)的格式将其中的各个元素拆分出来,例如图 1.2(b)中的 URL 会拆分成图 1.2(c)的样子。然后,通过拆分出来的这些元素,我们就能够明白 URL 代表的含义。例如,我们来看拆分结果图1.2(c),其中包含 Web 服务器名称 http://www.lab.glasscom.com,以及文件的路径名 /dir1/file1.html,因此我们就能够明白,图1.2(b)中的 URL 表示要访问 http://www.lab.glasscom.com 这个 Web 服务器上路径名为 /dir/file1.html 的文件,也就是位于 /dir/ 目录下的 file1.html 这个文件(图1.3)。

6dee6b7731c88d096bd824671ca38335.png

9aeef1dd302b904cc8d22d4710497b7c.png

1.3. HTTP 的基本思路

解析完 URL 之后,我们就知道应该要访问的目标在哪里了。接下来,浏览器会使用 HTTP 协议来访问 Web 服务器,不过在介绍这一环节之前,我们先来讲一讲 HTTP 协议到底是怎么回事。

e50cb5a0dfe352da127f89bdc36a5187.png

HTTP 协议定义了客户端和服务器之间交互的消息内容和步骤,其基本思路非常简单。首先,客户端会想服务器发送请求消息(图1.4)。请求消息中包含的内容是“对什么”和“进行怎样的操作”两个部分。其中相当于“对什么” 的部分称为 URI。一般来说, URI 的内容是一个存放网页数据的文件或者是一个 CGI 程序的文件名,例如 “/dir1/file1.html”“/dir1/program1.cgi”等等。不过,URI 不仅限于此,也可以直接使用 “http:” 开头的 URL 来作为 URI。换句话说就是,这里可以写各种访问目标,而这些访问目标统称为 URI。相当于接下来“进行怎样的操作”的部分称为方法。方法表示需要让 Web 服务器完成怎样的工作,其中典型的例子包括读取 URI 表示的数据、将客户端输入的数据发送给 URI 表示的程序等。表 1.1 列举了主要的方法,通过这张表大家应该能够理解通过方法可以执行怎样的操作。

5213ea35683719d62427a646fa59a2fb.png

除了图 1.4 中的内容之外, HTTP 消息中还有一些用来表示附加信息的头字段。客户端向 Web 服务器发送数据时,会先发送头字段,然后再发送数据。不过,头字段属于可有可无的附加信息。收到请求消息之后, Web 服务器会对其中的内容进行解析,通过 URI 和方法来判断“对什么”“进行怎样的操作”,并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。在响应消息的开头有一个状态码,它用来表示操作的执行结果是成功还是发生了错误。当我们访问 Web 服务器时,遇到找不到的文件就会显示 404 Not Found 的错误信息,其实这就是状态码。状态码后面就是头字段和网页数据。响应消息会被发送回客户端,客户端收到之后,浏览器会从消息中读出所需的数据并显示在屏幕上。到这里,HTTP 的整个工作就完成了。

(1)GET 方法

现在大家已经了解了 HTTP 的全貌,下面我们再补充一些关于 HTTP 方法的知识。表 1.1 列出的方法中,最常用的一个就是 GET 方法了。一般当我们访问 Web 服务器获取网页数据时,使用的就是 GET 方法。所谓一般的访问过程大概就是这样的:首先,在请求消息中写上 GET 方法,然后在 URI 中写上存放网页数据的文件名 “/dir1/file1.html”,这就表示我们需要获取 /dir1/file1.html 文件中的数据。当 Web 服务器收到消息后,会打开 /dir1/file1.html 文件并读取出里面的数据,然后将读出的数据存放到响应消息中,并返回给客户端。最后,客户端浏览器会收到这些数据并显示在屏幕上。

(2)POST 方法

还有一个经常使用的方法就是 POST。我们在表单中填写数据并将其发送给 Web 服务器时就会使用这个方法。当我们在网上商城填写收货地址和姓名,或者是在网上填写问卷时,都会遇到带有输入框的网页,而这些可以输入信息的部分就是表单。使用 POST 方法时,URI 会指向 Web 服务器中运行的一个应用程序的文件名,典型的例子包括“index.cgi”“index.php”等。然后,在请求消息中,除了方法和 URI 之外,还要加上传递给应用程序和脚本的数据。这里的数据也就是用户在输入框中填写的信息。当服务器收到消息后, Web 服务器会将请求消息中的数据发送给 URI 指定的应用程序。最后,Web 服务器从应用程序接受输出的结果,会将它存放到响应消息中并返回给客户端。前面两个方法属于 HTTP 的典型用法,其他方法就不多做介绍,其实只要理解了这两个方法,就能够应付大部分情况了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值