网络——生成HTTP请求消息、向DNS服务器查询Web服务器的IP地址(摘抄)
《网络是怎样连接的》章节摘抄第1章浏览器生成消息——探索浏览器内部
一、生成HTTP请求消息
浏览器会根据网址的含义来生成请求消息。浏览器通过请求消息将用户需要哪些数据告知服务器,
二、向DNS服务器查询Web服务器的IP地址
请求消息生成之后,浏览器会委托操作系统向Web服务器发送请求,但浏览器必须告诉操作系统接收方的IP地址才行,因此浏览器必须先查出Web服务器的IP地址。网址中只有Web服务器的域名,因此浏览器需要向DNS服务器查询域名对应的IP地址
三、全世界DNS服务器的大接力
全世界共有上万台DNS服务器,它们相互接力才能完成IP地址的查询
四、委托协议栈发送消息
查询到IP地址之后,浏览器就可以将消息委托给操作系统发送给Web服务器了
一、生成HTTP请求消息
1、网址
需要判断哪种功能来访问相应的数据:
访问Web服务器时用“http:”,而访问FTP服务器时用“ftp:”
常见的几种URL,根据访问目标的不同,URL的写法也会不同:
在访问Web服务器和FTP服务器时,URL中会包含服务器的域名和要访问的文件的路径名等,而发邮件的URL则包含收件人的邮件地址。此外,根据需要,URL中还会包含用户名、密码、服务器端口号等信息。
访问时使用的协议类型:
URL开头的文字,即“http:”“ftp:”“file:”“mailto:”这部分文字都表示浏览器应当使用的访问方法。
2、浏览器先要解析URL
浏览器先对URL进行解析,从而生成发送给Web服务器的请求消息。URL的格式会随着协议的不同而不同。
Web浏览器解析URL的过程:
当对URL进行解析时,首先URL会被拆分,通过拆分出来的这些元素,我们就能够明白URL代表的含义。
路径名为/dir/file1.html的文件
3、省略文件名的情况
http : //www.lab.glasscom.com/dir/
以“/”结尾代表/dir/后面本来应该有的文件名被省略了。根据URL的规则,文件名可以像前面这样省略。
在服务器上事先设置好文件名省略时要访问的默认文件名。这个设置根据服务器不同而不同,大多数情况下是index.html或者default.htm之类的文件名。因此,服务器就会访问/dir/index.html或者/dir/default.htm
http:/ /www.lab.glasscom. com
连结尾的“/”都省略了。像这样连目录名都省略时,即当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index. html或者/default.htm这些文件。
http:// www.lab.glasscom.com/whatisthis
末尾没有“/”,如果Web服务器上存在名为whatisthis的文件,则将whatisthis作为文件名来处理;如果存在名为whatisthis的目录,则将whatisthis作为目录名来处理
4、HTTP的基本思路
解析完URL之后,就知道访问的目标在哪里了。接下来,浏览器会使用HTTP协议来访问Web服务器,
HTTP的主要方法
HTTP消息中还有一些用来表示附加信息的头字段。客户端向Web服务器发送数据时,会先发送头字段,然后再发送数据。不过,头字段属于可有可无的附加信息
访问Web服务器获取网页数据时,GET方法:
首先,在请求消息中写上GET方法,然后在URI中写上存放网页数据的文件名“/dir1/file1.html”,这就表示我们需要获取/dir1/file1.html文件中的数据。当Web服务器收到消息后,会打开/dir1/file1.html文件并读取出里面的数据,然后将读出的数据存放到响应消息中,并返回给客户端。最后,客户端浏览器会收到这些数据并显示在屏幕上。
在表单中填写数据并将其发送给Web服务器时,POST方法:
当在网上有可以输入信息的部分就是表单。使用POST方法时,URI会指向Web服务器中运行的一个应用程序的文件名,典型的例子包括“index.cgi”“index. php”等。然后,在请求消息中,除了方法和URI之外,还要加上传递给应用程序和脚本的数据。这里的数据也就是用户在输入框里填写的信息。当服务器收到消息后,Web服务器会将请求消息中的数据发送给URI指定的应用程序。最后,Web服务器从应用程序接收输出的结果,会将它存放到响应消息中并返回给客户端。
PUT和DELETE方法:
就能够从客户端修改或者删除Web服务器上的文件。
5、生成HTTP请求消息
对URL进行解析之后,浏览器确定了Web服务器和文件名,根据这些信息来生成HTTP请求消息了。
请求消息的第一行称为请求行,方法可以告诉Web服务器它应该进行怎样的操作
HTTP消息的格式:
表单中对方法的区分
写好方法之后,加一个空格,然后写URI。URI部分的格式:/<目录名>/…/<文件名>,一般是文件和程序的路径名。
第一行的末尾需要写上HTTP的版本号。
第二行开始为消息头,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等
消息体:添加一个完全没有内容的空行,然后写上需要发送的数据。也就是消息的主体。
6、 发送请求后会收到响应
请求消息发送出去之后,Web服务器会返回响应消息
在响应消息中,第一行的内容为状态码和响应短语,用来表示请求的执行结果是成功还是出错。
状态码是一个数字,它主要用来向程序告知执行的结果;相对地,响应短语则是一段文字,用来向人们告知执行的结果。
由于每条请求消息中只能写1个URI,所以每次只能获取1个文件,如果需要获取多个文件,必须对每个文件单独发送1条请求。比如1个网页中包含3张图片,那么获取网页加上获取图片,一共需要向Web服务器发送4条请求。
二、向DNS服务器查询Web服务器的IP地址
1、 IP地址的基本知识
在生成HTTP消息之后,根据域名查询IP地址。
查询网址中服务器域名对应的IP地址。在委托操作系统发送消息给Web服务器时,必须要提供的不是通信对象的域名,而是它的IP地址。
互联网和公司内部的局域网都是基于TCP/IP
TCP/IP的结构就是由一些小的子网,通过路由器连接起来组成一个大的网络。这里的子网可以理解为用集线器连接起来的几台计算机,我们将它看作一个单位,称为子网。将子网通过路由器连接起来,就形成了一个网络。所有的设备都会被分配一个地址。通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。
发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。前面的过程不断重复,最终消息就被传送到了目的地。
IP地址的表示方法
子网掩码表示网络号与主机号之间的边界
主机号部分全部为0代表整个子网而不是子网中的某台设备。主机号部分全部为1代表向子网上所有设备发送包,即广播。
域名和IP地址并用:
让人来使用名称,让路由器来使用IP地址。为了填补两者之间的障碍,需要有一个机制能够通过名称来查询IP地址,或者通过IP地址来查询名称,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是DNS。
Socket库提供查询IP地址的功能:
查询IP地址的方法非常简单,只要询问最近的DNS服务器“www.lab.glasscom.com的IP地址是什么”就可以了,DNS服务器会回答说“该服务器的IP地址为xxx.xxx.xxx.xxx”
向DNS服务器发送查询消息,并接收服务器返回的响应消息。计算机上一定有相应的DNS客户端,而相当于DNS客户端的部分称为DNS解析器,或者简称解析器。通过DNS查询IP地址的操作称为域名解析,负责执行解析(resolution)这一操作的就叫解析器(resolver)了。
Socket库包含的程序组件可以让其他的应用程序调用操作系统的网络功能,而解析器就是这个库中的其中一种程序组件。
通过解析器向DNS服务器发出查询:
调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中。接下来,浏览器在向Web服务器发送消息时,只要从该内存地址取出IP地址,并将它与HTTP请求消息一起交给操作系统就可以了。
解析器会根据DNS的规格,生成一条表示“请告诉我www.lab.glasscom.com的IP地址”的数据,并将它发送给DNS服务器。发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈来执行。解析器调用协议栈后,控制流程会再次转移,协议栈会执行发送消息的操作,然后通过网卡将消息发送给DNS服务器。
如果要访问的Web服务器已经在DNS服务器上注册,那么这条记录就能够被找到,然后其IP地址会被写入响应消息并返回给客户端。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器,然后解析器读取出消息取出IP地址,并将IP地址传递给应用程序。实际上,解析器会将取出的IP地址写入应用程序指定的内存地址中,用“<内存地址>”来表示,在实际的程序代码中应该写的是代表这一内存地址的名称。
向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中TCP/IP的设置方法也有差异,Windows中的设置如图所示,解析器会根据这里设置的DNS服务器IP地址来发送消息。
解析器的工作就完成了,控制流程重新回到应用程序(浏览器)。