HTTP协议从诞生之初到现在经历了若干个版本,其中最主要的版本为:HTTP/1.0、HTTP/1.1,
其中HTTP/1.0是第一个得到广泛使用的版本,而HTTP/1.1为当前使用的主流版本。

1. HTTP1.0简介

HTTP/1.0是第一个得到广泛使用的HTTP版本。HTTP/1.0在HTTP/0.9的基础上增加了HTTP请求
头,可支持更多的请求方法,并且能对多媒体对象进行处理。HTTP/1.0使得包含生动图片的Web页面和交互式表格称为可能,而正是这些页面和表格促使互联网被人们广泛地接受。HTTP 1.0规定浏览器与服务器之保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

2. HTTP/1.1简介

HTTP/1.1的重点是修复HTTP设计中的缺陷,从可扩展性、缓存处理、带宽优化、持久连接、
HOST头、错误通知、消息传递、内容协商等多个方面都做了相关改进。HTTP/1.1是当前互联网
主流的HTTP版本。
在连接方面,HTTP1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,
减少了建立和关闭连接的消耗和时间延迟。
在请求方面,HTTP1.1增加了更多的请求头和想响应头信息,来增强HTTP功能。例如:HOST
主机头功能,可以使得Web浏览器可以使用主机头名来明确表示要访问服务器上的哪个Web站点,
这样就可以使用web服务器在同一个IP地址和端口号上配置多个虚拟web站点。

  1. HTTP1.1的持久连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为<br />Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close<br />时,客户端通知服务器返回本次请求结果后关闭连接。HTTP1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头等。

3. http协议请求方法

在Http通信中,每个HTTP请求报文都包含一个方法。用以告诉web服务器端需要执行什么具体
的动作,这些动作包括:获取指定Web页面、提交内容到服务器、删除服务器上的资源文件等,这些HTTP请求报文中包含的方法被称为HTTP请求方法。其中,常用的HTTP请求方法见下表。
常用的HTTP请求方法

HTTP方法 作用描述
GET 客户端请求指定资源信息,服务器返回指定资源。
HEAD 只请求响应报文中的HTTP头部。
POST 将客户端的数据提交到服务器,例:注册表单。
PUT 从客户端向服务器传送的数据取代指定的文档内容。
DELETE 请求服务器删除Request-URL所标识的资源
MOVE 请求服务器将指定的页面移至另一个网络地址

4. HTTP状态码介绍

HTTP状态码(HTTP Status Code)是用来表示Web服务器响应HTTP请求状态的数字代码。
每当web客户端向web服务器发送一个HTTP请求时,web服务器都会返回一个状态响应代码。
这个状态码是一个三位数字代码,作用是告知web客户端此次的请求是否成功,或者是否要采取
其它的动作方式。

  1. HTTP协议1.1版本中的状态码可以分为五大类。如下表所示。
状态码范围 作用描述
100-199 用于指定客户端相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于指出服务器的错误。
  1. 通过上表可知道,http相应的状态码种类很多,单身在实际工作场景中,经常遇到的状态码却不多。

4.1 生产场景常见的重要代码及对应的作用

状态代码 详细描述说明
200 – OK 服务器成功返回网页,这是成功的http请求,返回的标准状态码。
301 – Moved Permanently 永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从 linux.ac.cn转到https:/www.linux.ac.cn
403 – Forbidden 禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务器权限配置不当所致。
404 – Not Found 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致。
500 – Internal Server Error 服务器内部错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统的错误,一般为服务器的设置或内部程序问题导致。例如:SElinux开启,而又没有为Http设置规则许可,客户端访问就是500.
502 – Bad Gateway 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题所致。
503 – Service Unavailable 服务器当前不可用,可能因为服务器超载或停机维护所致,或者反向代理服务器后面没有可以提供服务的节点。
504 – Gateway Timeout 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。

4.2 HTTP状态码的命令行查看

可以通过curl命令附带相关参数在Linux命令行查看HTTP响应的数字状态码,如下:
[root@Route ~]# curl -I https://www.linux.ac.cn
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 29 Nov 2016 13:11:20 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.20
Set-Cookie: PHPSESSID=linitar1o3qgb5qqo04dnka9m5; path=/; HttpOnly
Link: https://www.linux.ac.cn/wp-json/; rel=”https://api.w.org/
Strict-Transport-Security: max-age=15768000

5. HTTP报文

HTTP报文中有很多内容,不同行的字段都是一些ASCII码串,各个字段的长度也是不同的。
HTTP报文可分为两种,一种是从WEB客户端发往web服务器的HTTP报文,称为请求报文(Request Message)。另外一种是从web服务器发往web客户端的报文,称为响应报文(Response Message)
,HTTP的请求和响应报文的格式类似。

5.1 HTTP请求报文(Request Message)介绍

HTTP请求报文由请求行、请求头部(header)、空行和请求报文主体几个部分组成,

HTTP请求报文格式说明:

报文格式 报文信息
请求行 请求方法URL协议版本。
请求头 字段名1:值1
字段名2:值2
……
例如:
Accept:image/gif,image/jpeg
Accept-Languange:zh-cn
空行 空白无内容
请求报文主体 GET方法没有请求报文主体,POST方法才有。

下面对HTTP请求报文的每个部分逐一阐述。
⑴ 请求行
请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段、URL字段和
HTTP协议版本字段共3个字段组成,它们之间用空格分隔。下面以GET /index.html HTTP/1.1为例来说明请求报文的起始请求行信息详解,

请求报文的起始请求行信息

请求方法字段实例 URL字段实例 HTTP协议版本
GET /index.html HTTP/1.1

⑵ 请求头部

  1. 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部的作用是<br />客户端把请求的相关信息告诉服务器,常见的请求头部信息见下表:
请求头信息 说明
Accpet:image/gif,image/jpeg 媒体类型
Accettp-Language:zh-cn 语言类型
Accept-Encoding:gzip,defate 支持压缩
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT;…) 客户端类型
Host:www.linux.ac.cn 主机名
  1. 与请求报文相关的最常用的请求头是Content-TypeContent-Length

⑶空行

  1. 最后一个请求头部信息之后是一个空行,发送回车符合换行符,通知web服务器空行以下不会<br />在有请求头部的信息了。

⑷请求报文主体

  1. 请求报文主体中包括要发送给web服务器的数据信息;请求报文主体不会应用于HTTPGET<br />命令方法,而是应用于POST方法。POST方法适用于需要客户端填写表单的场合。