一:浏览器生成内部消息

浏览器生成内部消息

1.生成HTTP请求消息

本次探索之旅从用户在浏览器中输入网址 (URL) 开始。接下来,浏览器的工作会从对用户输入的网址进行解析开始。浏览器如何解析网址就是我们的第一个看点。然后,浏览器会根据网址的含义来生成请求消息。浏览器通过请求消息将用户需要哪些数据告知服务器,而请求消息实际的样子就是我们的第二个看点。只要理解了具体的消息长什么样,我们也就能够理解访问 Web服务器时使用的 HTTP 协议的原理了。


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

​ 在学习浏览器的工作方式之前,我们先学习一下网址[URL],除了有"http:"开头的,还会有ftp: file: mailto: 等开头的

​ 然而我们在日常生活中,通常使用浏览器来访问web服务器,但实际上浏览器的功能很多,是一个具备多种客户端功能的综合性客户端软件,而URL就是用来判断应该用那种功能来访问相应数据。

​ 据访问目标的不同,URL的写法也会不同。例如在访问Web服务器和FTP服务器时,URL中 会包含服务器的域名和要访问的文件的路径名等,而发邮件的URL则包含收件人的邮件地址。此外,根据需要,URL中还会包含用户名、密码、 服务器端口号等信息。

​ url开头的文字,表示的是浏览器应该使用的访问方法。访问web服务器时使用的时HTTP协议,可以把这一部分理解为访问时要使用的协议类型,虽然后面不同,但开头部分决定了后面部分的写法,不会造成混乱。


1.2浏览器先要解析URL
  • 以http的规格展示浏览器如何解析URL
1.3省略文件名的情况

这类没有文件名,服务器如何知道要访问哪个文件呢?我们可以在服务器上设置号文件名省略时的默认文件名。大多数情况下时index.html或者default.htm之类的文件名。

这个URL也是以"/"结尾的,这种情况下访问的是文件根目录下的默认文件名。

这种情况下,访问根目录下实现设置的默认文件

  • )“http://www.lab.glasscom.com/whatisthis

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


1.4HTTP的基本思路

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

  • 除了以上的内容之外,HTTP消息中还有一些用来表示附加信息的头字段。客户端向We b服务器发送数据时,会先发送头字段,然后再发送数据。不过,头字段属于可有可无的附加信息,因此我们留到后面再讲。

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


1.5 生成http请求消息和收到的响应消息

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

第二行开始为消息头。尽管通过第一行我们就可以大致理解请求的内 容,但有些情况下还需要一些额外的详细信息,而消息头的功能就是用来 存放这些信息。消息头的规格中定义了很多项目,如日期、客户端支持的 数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有 效期和最后更新时间等。这些项目表示的都是非常细节的信息,因此要想 准确理解这些信息的意思,就需要对 HTTP 协议有非常深入的了解。表 1.2中列举了主要的头字段供大家参考,但不必全部弄明白。消息头中的内容随着浏览器类型、版本号、设置等的不同而不同,大多数情况下消息头的长度为几行到十几行不等。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值