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网关超时