1.HTTP协议概述

       本文将针对HTTP协议结构进行讲解,主要针对HTTP/1.1版本。

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

       请求访问文本或图片等资源的一端成为客户端,而提高资源响应的一端称为服务器端。


       这两台计算机之间使用HTTP协议进行通信,在一条通信线路上必定有一端是客户端,另外一端是服务器端。

      有时候,两台计算机作为客户端和服务器端的角色有可能会互换。但就仅从一条通信路线来说,服务器端和客户端的角色时确定定的。用HTTP协议就能明确地区分哪端是客户端,哪端是服务器端。

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

       HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。

       也就是说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。


       下面是客户端发送给HTTP服务器端的请求报文中的内容。


       GET:请求 访问服务器的类型,称之为方法(method);

       字符串/index.htm:请求访问的资源对象,也叫做请求URL(request-URL);

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

       综合来看,这段请求内容的意思是:请求访问HTTP服务器上/index.htm页面资源。

       

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


接收到请求的服务器,会将请求内容的处理结果以响应的形式返回,如下图所示。


第一行,

       HTTP/1.1:服务器对应的HTTP版本;

       200 OK:请求的处理结果的状态码(status code)和原因短语(reason-phrase);

第二行及之后的两行:

       创建响应的日期时间,是首部字段(header field)内的一个属性;

接着以一空行分隔。之后的内容被称为资源实体的主体(entity body);


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

HTTP是不保存状态的协议

       HTTP是一种不保存状态,即无状态协议。HTTP协议不对请求和响应之间的通信状态进行保存。

       HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。


       使用HTTP协议,每当有新的请求发送时,就会有对应的新的响应产生。协议本身并不保留之前一切的请求或响应报文的信息。

       这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单。

      但是,在某些情况下,比如,用户登录到一家购物网站,即使他跳转到该站的其他页面,也需要保存登录状态。在这个时候,需要保存用户的状态。

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

请求URI定位资源

HTTP协议使用URI定位互联网上任意位置的资源。


当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。指定请求URI的方式有很多。


       如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI。

       下面这个例子是查询HTTP服务器端支持的HTTP方法种类。


告知服务器意图的HTTP方法

HTTP/1.1中可使用的方法如下:

GET:获取资源

       GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应的内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CGI(通用网关接口)那样的程序,则返回经过执行后的输出结果。



POST:传输实体主体

POST方法用来传输实体的主体。