一. 概述
从整体来看,http请求的整个过程就是客户端和服务器之间的信息交互,如下图所示。
其中用户端输入URL,然后浏览器将其解析为请求信息发送给服务器。服务器收到请求信息,根据请求的内容返回信息给到浏览器,浏览器再将信息进行解析,展示在界面上,使得用户可以直观查看。这就是客户端与服务器端的直观交互过程。
URL: United Resource Locator,统一资源定位符
简单来说,就是浏览器中http://开头的那串字符,俗称“网址”
不过URL除了http://开头的网址,还包括以其他字符开头的网址,如ftp:,https:等
根据访问的目标服务器不同,网址所使用的协议(也就是http,ftp)也会有所不同
下面我们将这个交互过程进行进一步的分解。
这篇主要讲的是生成HTTP请求信息。
二. URL的解析
浏览器解析第一步:网址的解析
如上图所示,解析后的部分有:协议名、字符串//、web服务器名和数据源路径名。
三. HTTP协议发送请求信息
之后的一步就是浏览器使用HTTP协议访问Web服务器,不过在此之前先来了解一下HTTP协议。
3.1 HTTP协议
HTTP协议的任务就是定义客户端与服务器端之间交互的信息内容和步骤。
其中交互的信息包括
- 请求信息
- 返回信息
3.1.1 请求信息
HTTP请求信息主要包括两个部分,概述来说分别是
- 目标
- 操作
访问的目标:也称URI,指服务器中的文件名,如图2中的"dir1/file1.html",也可以将URL作为URI。
URI:Uniform Resource Identifier,统一资源标识符
URI的内容是一个存放网页数据的文件名或者CGI程序的文件名
CGI:Common Gateway Interface,公共网关接口
CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。(百度百科)
访问的操作:也称方法,表示需要Web服务器完成怎样的操作,例如比较常用的GET(从服务器中获取数据)、POST(发送数据到服务器中去)。
下面为HTTP的主要方法列表
方法 | 含义 |
---|---|
GET | 获取 URI 指定的信息。如果 URI 指定的是文件,则返回文件的内容;如果 URI 指定的是 CGI 程序,则返回该程序的输出数据 |
POST | 从客户端向服务器发送数据。一般用于发送表单中填写的数据等情况下 |
HEAD | 和 GET 基本相同。不过它只返回 HTTP 的消息头(message header),而并不返回数据的内容。用于获取文件最后更新时间等属性信息 |
OPTIONS | 用于通知或查询通信选项 |
PUT | 替换 URI 指定的服务器上的文件。如果 URI 指定的文件不存在,则创建该文件 |
DELETE | 删除 URI 指定的服务器上的文件 |
… | … |
其中get和post属于HTTP的典型方法,除此之外,其他的方法在互联网中几乎见不到使用的例子。
3.1.2 返回信息
返回信息是Web服务器处理完客户端发来的请求信息,完成自己的工作,返回给客户端的信息。其中包括的重点内容为:
- 状态码——用来表示操作的结果是否成功
- 头字段
- 网页数据
3.2 访问Web服务器
格式要求:HTTP消息在格式上也有严格的要求,因此浏览器会按照规定的格式生成请求/返回信息。
在请求信息中,第一行为主要信息,其中包含了方法和URI,以及HTTP的版本。第二行开始的消息头,主要是额外的描述信息,其中包括日期、客户端支持的数据类型、语言、压缩格式、数据有效期、最后更新时间等。消息头中的内容随着浏览器的类型、版本号、设置等的不同而不同。消息头结束后,是一个空行,然后写需要发送的数据,即消息体(在get方法下,不需要填写任何的数据)
在响应信息中,和请求信息最大的差别就是第一行的内容。响应信息的第一行内容为状态吗和响应短语,用来说明执行的结果。下表为状态码的概要。
状态码 | 描述信息 |
---|---|
1xx | 告知请求的处理进度和情况 |
2xx | 成功 |
3xx | 表示需要进一步操作 |
4xx | 客户端错误 |
5xx | 服务器错误 |
在HTTP访问的时候,特别要注意的一点是,在访问包含图片的网页中,图片也是一个URI。由于每条请求是只能写一个URI的,所以每次只能获取一个文件,如果还想要获取多个文件,需要对每个文件都发送一次请求。所以在访问包含图片的网页中,需要不止一个请求访问web服务器。比如一个网页包含3张图片,那么获取网页加上获取图片,一共需要4次请求。
参考:
《网络是怎样连接的》