名词解释
首先来认识一下相关名词:
- 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条请求。