HTTP协议的概念和工作原理

一、HTTP协议是什么

HTTP是一种超文件传输协议,是用于WWW服务器传输超文本到本地浏览器的传送协议。它可以是浏览器更加高效,使网络传输减少。

二、HTTP报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文(Request)和响应报文(Response)

报文的组成部分

(1)起始行(start line)

(2) 首部(header)

   ■通用首部:即可以出现在请求报文中,也可以出现在响应报文中

   通用的信息性首部:

   Connection:运行客户端和服务器指定与请求/响应连接有关的选项

   Date:      提供日期和时间标志,说明报文是什么时间创建的

   MIME-Version:给出了发送端使用的MIME版本

   Trailer:如果报文采用了分块传输编码(chunked transfer encoding)方式

   Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用什么编码方式

   Update:给出了发送端可能想要“升级”使用的新版本或协议

   Via:显示了报文经过的中间节点(代理、网关)

   ■请求首部:提供更多有关请求的信息

   clinet-ip:提供了运行客户端的机器的IP地址

   From:提供了客户端用户的E-mail地址

   Host:给出了接受请求的服务器的主机名和端口号

   Referer:提供了包含但却请求URI的文档的URL

   UA-Color:提供了与客户端显示颜色有关的信息  

   US-Disp:提供了与客户端显示器(屏幕)能力有关的信息

   US-OS:给出了客户端显示器的像素信息

   ■响应首部:提供更多有关响应的信息。响应报文由自己的响应首部集。响应首部为客户提供了一些额外的信息

   Age:(从最初创建开始)响应持续时间

   Public:服务器为某资源支持的请求方法列表

   Retry-After:如果资源不可用的话,再次日期或时间重试

   Server:服务器应用程序软件的名称和版本

   Title:对HTML文档来说,就是HTML文档的源端给出的标题

   Warning:比原因短语中更详细的一些警告报文

   ■实体首部:描述主题的长度和内容,或者资源自身

   ALLOW:列出了可以对此实体执行的请求方法

   Location:告知客户端实体实际上位于何处;用于接收端定向到资源的位置上去

(3)主体

HTTP的第三部分是可选的实体主体部分,实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。

HTTP报文可以承载很多类型的数字数据,图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。

案例:telnet请求测试

[root@TP-CW-WS-PH-01 ~]# telnet 192.168.0.233 80
Trying 192.168.0.233...
Connected to 192.168.0.233.
Escape character is '^]'.
GET /index.php http/1.1
Host: 192.168.0.233
HTTP/1.1 200 OK
Date: Sun, 30 Dec 2007 22:37:16 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.18
P3P: CP=CAO PSA OUR
Content-Length: 6719
Connection: close
Content-Type: text/html; charset=UTF-8

response:

<version><status><reason-phrase>
<headers>
<entriy-body>


示例:

HTTP/1.0 200 OK    //起始行
Content-type:text/plan    //首部
Content-length:19
hi how are you !   主题

三、HTTP协议请求方法

(1)GET:要求服务器将URL定位的资源放在响应报文的数据部分,挥动给客户端。

(2)POST:此类方式大多用于页面的表单中。

(3)HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。

(4)PUT:(webdav)

(5)DELETE:(webdav)删除操作

(6)OPTIONS:返回请求资源说支持的方法的方法

(7)TRACE:追求一个资源请求中间所经过的代理

四、HTTP版本号

HTTP0.9是最早的版本,它只定义了最基本的简单请求和简单回答;HTTP1.0较完善,也是目前使用广泛的一个版本;HTTP1.1增加了大量的报头域,并对HTTP1.0中没有严格定义的部分做了进一的说明。具体如下:

(1)可扩展性

(2)缓存;HTTP/1.1增加了Cachce-Control头域

(3)带宽优化

(4)长连接

(5)消息传递

(6)Host头域

(7)错误提示;新增了24个状态响应码,如409(Confilic)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除

(8)内容协商

五、HTTP状态码

HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

●1XX:指示信息--表示请求已接受,继续处理

●2XX:成功--表示请求已被成功接收、理解、接受。

●3XX:重定向--要完成请求必须进行更进一步的操作。

●4XX:客户端错误--请求有语法错误或请求无法实现。

●5XX:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。

●200 OK:客户端请求成功。

●301永久重定向,Location响应首部的值仍为当前URL,因此为隐藏重定向

●302临时重定向,显示重定向,Location响应首部的值为新的URL

●400 Bad Request:客户端请求有语法错误,不能被服务器所理解。

●401 Unauthorized:请求未经授权,这个状态代码必须如WWW-Authenticate报头域一起使用。

●403 Forbidden:服务器收到请求,但是拒绝提供服务。

●404 NOT Found:请求资源不存在,举个例子:输入错误的URL。

●500 Internal Server Error:服务器发送不可预期的错误。

●502 Bad Gateway

●503 Server Unavaliable;服务器当前不能处理客户端的请求,一段时间后肯呢个恢复正常,举个例子:HTTP/1.1 200 OK(CRLF).

●504 Gateway Timout网关超时