[HTTP-2]-简单的HTTP协议(上)

Posted 他们已经在路上了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HTTP-2]-简单的HTTP协议(上)相关的知识,希望对你有一定的参考价值。


上节已经描述了HTTP协议的基础,该节主要描述HTTP协议的结构。

[HTTP-2]文章结构






HTTP协议用于客户端和服务器端之间的通信


HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。

客户端:请求访问文本或图像等资源的一端称为客户端。

服务器端:提供资源响应的一端称为服务器端。

两台计算机之间使用HTTP协议通信时,在一条通信路线上必定有一端是客户端角色,另一端是服务器端角色。
有时候,按照实际情况或需求,两台计算机作为客户端和服务端的角色有可能会出现互换。但仅从一条通信路线来说,服务器端和客户端的角色是确定的,而用HTTP协议能够明确区分哪端是客户端,哪端是服务器端。

HTTP协议通过请求和响应的交换达成通信


通信过程:

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换言之,肯定是从客户端建立通信,服务器端在收到客户端的请求之前是不会发送响应的。

客户端的请求报文

下面来看一个标准的示例:

[HTTP-2]-简单的HTTP协议(上)

下面对从客户端发送给某个HTTP服务器端的请求报文中的内容简单解读:

GET/index.htm HTTP/1.1 Hostwww.baidu.com

GET: 第一行开头的GET表示请求访问服务器的类型,称之为方法(method)。

/index.htm: 是指请求访问的资源对象,也叫作请求URI。

HTTP/1.1: 是指HTTP的版本号,用来提示客户端使用的HTTP协议功能。

综上所述, 这段请求的内容意思就是:请求访问某台HTTP服务器上的/index.htm页面的资源。

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。(见下图)

服务器的响应报文

当服务器端接收到请求,会将请求内容的处理结果以响应的形式返回。

我们来看看下面这段从服务器端返回的内容:

HTTP/1.1200ok Date:Tue,10Jul201206:50:15GMT Content-Type:text/html<html> ......

HTTP/1.1: 表示服务器对应的HTTP版本。

200 OK: 表示请求的处理结果的状态码和原因短语。

响应时间: 下边显示了创建响应的日期时间,是首部字段内的一个属性。

再下边以一空行分隔,之后的内容成为资源实体的主体。

响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用来解释状态码的原因短语、可选的响应首字段以及实体主体构成。

HTTP是不保存状态的协议


HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或者响应都不做持久化处理。

无状态存在的问题:

随着Web的不断发展,因无状态而导致业务处理变得棘手的情况越来越多。比如,用户登录到一家购物网站,即使跳转到该网站的其他页面后,也需要依然保持登录状态。针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态。

Cookie技术引入解决无状态问题:

HTTP/1.1虽然是无状态协议,但是为了实现期望的保持状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。有关Cookie的内容后续再讲解。

请求URI定位资源


HTTP协议使用URI定位互联网上的资源。正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。
当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。指定请求URI的方式有很多。

URI为完整的请求URI:

GET http://www.baidu.com/index.htm HTTP/1.1

在首部字段Host中写明网络域名或IP名称:

GET /index.htm HTTP/1.1 Host:www.baidu.com

除此之外,如果不是访问特定资源,而是对服务器本身发起请求,可以用一个 * 来代替请求URI。下面这个例子是查询HTTP服务器端支持的HTTP方法种类。
OPTIONS * HTTP/1.1

(也即是说可以用这个方法查询HTTP服务器支持哪些访问方法,下集我们就讲讲HTTP中可用的方法等内容)

以上是关于[HTTP-2]-简单的HTTP协议(上)的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 协议入门

HTTP 协议入门

从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

阮一峰 || HTTP 协议入门

HTTP/2 协议(帧消息流简单的抓包分析)

客户端可以使用 HTTP/2 协议向服务器推送消息吗?