浏览器生成消息之生成HTTP请求消息(一)

名词解释

首先来认识一下相关名词:

  • URL:一般说的网址就是“URL”,其英文是Uniform Resource Locator,即统一资源定位符。
  • CGI:对web服务器程序调用其他程序的桂策所做的定义就是CGI,而按照CGI规范来工作的程序就是CGI程序。
  • URI:“URI”不同于“URL”,其内容是一个存放网页数据的文件名或者是一个CGI程序的文件名,其英文是Uniform Resource Identifier,即统一资源标识符。更简单的说法是 访问目标统称为URI。
  • FTP:File Transfer Protocol,即文件传输协议。使用FTP协议来传送文件的程序也被叫做FTP。
  • 域名:就是像www.baidu.com这种的名称。
  • 端口号:用来识别服务器程序的编号。
  • 协议:通信操作的规则定义称为协议(protocol)。
  • HTTP:Hypertext Transfer Protocol,超文本传送协议。定义了客户端和服务器之间交互的消息内容和步骤。
  • 表单:网页中的文本框、复选框等能够输入数据的部分。
  • GET:HTTP的常用方法。用来获取URI指定的信息。如果URI指定的是文件,则返回文件的内容;如果URI指定的是CGI程序,则返回该程序的输出数据。
  • POST:HTTP的常用方法。从客户端向服务端发送数据。一般用于发送表单中填写的数据等情况下。

注: 暂时想到这么多,后续需要再添加。

URL

URL的分类

我们常见的是以http://开头的URL,除此之外,还有ftp://、file://、mailto://等,在访问web服务器时用http,而访问FTP服务器时则用ftp:// 。

URL的格式

  • 访问Web服务器
    http://user:password@www.baidu.com:80/dir/file.htm
    用户名(可省):密码(可省)@web服务器域名:端口(可省略)/文件路径名
  • 访问FTP服务器
    ftp://user:password@www.baidu.com:21/dir/file.htm
    用户名(可省):密码(可省)@ftp服务器域名:端口(可省略)/文件路径名
  • 访问计算机本地文件
    file://localhost/c:/path/file1.zip
    本地地址(可省略)/路径
  • 发送电子邮件
    mailto:1234@qq.com
    mailto: 邮件地址

URL解析

当URL输入地址栏以后,浏览器要做的第一步工作就是对URL进行解析,然后发送给web服务器,而解析的原理就是根据上述URL的格式进行解析。解析得到访问的地址。

我们常见的URL都是上述格式的,但是也有的URL省略了文件名,假设url=http://www.baidu.com/dir ,这时在dir文件夹后省略了文件名,这时,服务器会根据事先设置好的默认文件名进行访问,一般都是index.html或者default.htm之类的文件名。
假设url=http://www.baidu.com/what ,服务器则会访问名为what文件或者what文件夹下默认文件,这里不会存在一个名为what的文件,又同时存在一个名为what的目录,这种情况不允许,所以不会产生歧义。

认识HTTP

基本思路

在解析完url之后,就知道要访问哪里了。接下来,浏览器会使用HTTP协议,访问web服务器。

在HTTP协议中,首先客户端(浏览器)会向服务端发送“请求消息”,请求消息分为两部分,即“对什么”和“怎样操作”两部分,其中“对什么”就是URI,而“怎样操作”则称为方法。方法表示需要让Web服务器完成怎样的工作,其中典型的例子包括:读取URI表示的数据、将客户端输入的数据发送给URI表示的程序等,常见的方法有“GET”和“POST”两种,除此之外还有“HEAD”、“OPTIONS”、“PUT”、“DELETE”、“TRACE”、“CONNECT”,这里只混眼熟,不作解释,用到时再查。

使用GET方法的时候,在请求消息中写上GET方法,然后在URI中写上存放网页数据的文件名“…/dir/text.html”

使用POST时,URI会指向web服务器中的一个应用程序的文件名(index.cgi和index.php等),然后,在请求消息中,除了方法和URI之外,还要加上传递给应用程序和脚本的数据,也就是用户填在表单中的信息。当服务器收到消息后,web服务器会将请求请求消息中的数据发送给URI指定的应用程序,最后,web服务器从应用程序接收输出端的结果,会将它存放在响应消息中并返回客户端。

联想:在前后端配置的时候,如果前端需要对输入数据后进行处理,则应该用POST发给后端,如果前端只是获取数据,则用GET,前后端保持路径和参数一致。

客户端向服务器发生数据时,会先发送投资端,然后发送数据。web服务器在收到请求消息之后,会对这些数据进行解析,并根据URI和方法进行判断对什么进行怎样操作,完成自己的工作之后,会将执行的结果放在响应消息之中。

响应消息会包含状态码(是否执行成功)、头字段和网页数据。响应消息会被发送回客户端,客户端收到之后,浏览器就会从消息中读出所需要的数据并显示在屏幕上。

注:当web浏览器遇到找不到的文件的时候,会返回404 Not Found 的错误消息,其中404就是状态码。

请求消息的格式

请求消息:

格式结构解释
<方法><空格><空格><HTTP版本>请求行可以大致了解请求的内容
<字段名><字段值>消息头每行包含一个头字段,用于表示请求的附加信息。消息头的行数根据具体情况可变,一直延伸到空行为止
消息头中定义了很多项目,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。
消息头大多几行到几十行不等
具体字段用到时再查,不详述
<空行>
<消息体>消息体包含客户端向服务端发送的数据,例如用POST方法向web服务器发送的网页表单数据

响应消息:

格式结构解释
<HTTP版本><空格><状态码><空格><响应短语>状态行用来解释状态码的短语,用来表示请求的执行结果是成功还是失败
<字段名>:<字段值>消息头
<空行>
<消息体>消息体包含服务器向客户端发送的数据,例如从文件中读取的数据,或者CGI应用程序输出的数据等。消息体的内容作为二进制数据来处理

发送请求消息后的响应

这里主要关注一下HTTP状态码

状态码含义
1xx告知请求的处理进度和情况
2xx成功
3xx表示需要进一步操作
4xx客户端错误
5xx服务器错误

注:状态码的第一位数字表示状态类型,第二位和第三位数字表示具体的情况

返回响应消息之后,浏览器会将数据提取出来显示在屏幕上

由于每条请求消息中只能写一个URI,所以每次只能获取一个文件,如果需要获取多个文件,必须对每个文件单独发送1条请求,比如一个网页中包含3张图片,那么获取网页家伙少年宫获取图片,一共需要向服务器发送4条请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值