Http协议学习

HTTP(HyperText Transfer Protocal)即超文本传输协议。它是Internet的应用层协议,定义了客户机的浏览器和服务器的Web应用之间如何进行通信以及通信时的数据包格式等。HTTP是采用请求/响应模式的无状态协议。浏览器发出请求,Web应用接受并处理请求,发出响应。Web应用不保存与任何一个客户机通信的状态。任何两个请求都是独立的。

HTTP请求信息

HTTP请求消息由Request-Line(请求行)、Header Field(头域)和Message-Body(消息体)组成。 Request-Line在HTTP请求消息的第一行。一般格式为:
Request-Line = Method[SP]Request-URI[SP]HTTP-Version CRLF
例子:GET / HTTP/1.1 Method成为HTTP方法,主要有GET、POST等等。Request-URI为资源定位符。Http-Version表示该请求使用的HTTP协议的版本号,一般为HTTP/1.0或HTTP/1.1。[SP]表示空格,CRLF表示回车换行。

HTTP方法

HTTP/1.1总共定义了OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT八种方法。重点就是GET、POST。

GET
GET方法向服务器申请请求URI指定的资源。GET方法的请求响应过程中,数据流主要是从服务器向客户机。所以GET请求的消息体通常不包含任何内容。
POST
Post主要用于向服务器提交数据内容。所以POST消息的消息体中会包含要提交的数据。POST通常用于提交登录信息,论坛发帖,发生E-mail等。

Request-URI

Request-URI成为请求URI,是一个不含空白字符,符合URI格式的字符串。它可以由四种形式:

格式 含义
"*" 说明该HTTP请求所请求的操作是针对整个WEB服务器,而不是针对某个特定资源。某些特定方法如OPTIONS适用。
absoluteURI 以协议开头的URI。指定一个唯一的网络资源位置。
abs_path 用相对形式表示的URI,必须以/开头。表示从Web服务器根目录开始的相对路径。它只是指出了Web服务器内部的路径。通常采用这样的URI,消息中都会有一个名为Host的头域,指出主机的地址。
authority 仅能被用于CONNECT方法。

HTTP响应消息

HTTP响应消息是Web服务器在处理完HTTP请求消息后返回给客户机浏览器的消息。也是由状态行、头域和消息体组成。状态行(Status-Line)的一般格式如下:
Status-Line = HTTP-Version[SP]Status-Code[SP]Reason-Phrase CRLF
例子:HTTP/1.1 200 OK Reason-Phrase是一个简短文字,对响应码(Status-Code)进行说明。响应码是三位十进制数,表示服务器处理请求的状态。

首位数字不同的类别

含义

例子

1xx

信息响应类,表示接收到请求并且继续处理

“100 Continue”,表示服务器已接收并开始处理请求,要求客户机继续发送请求的剩余部分。

2xx

处理成功响应类,表示动作被成功接收,理解和接受。

"200 OK"表示请求的操作已成功完成。

3xx

重定向响应类,为了完成指定的动作,必须接受进一步处理。

“301 Moved Permanently”,表示请求的资源已被永久移往另外一个URI,新的URI由响应信息的Location头域说明。“302 Found”表示请求暂时被重定向为另外一个URI。

4xx

客户端错误类,客户请求包含语法错误或者是不能被正确执行。

“404 Not Found”表示客户端请求中Request-URI表示的资源不存在。“400 Bad Request”表示客户端提交的请求无法被服务端理解。“403 Forbidden”表示服务端理解但是拒绝执行客户端请求的操作。

5xx

服务端错误类,表示服务器不能正确执行一个正确的请求。

“500 Internal Server Error”表示服务器遇到一个非预期错误而导致无法完成请求的操作。

HTTP的Header Field(头域)

HTTP的请求和响应消息中都包含Header Field, 这些头域用于说明一些辅助信息。有一些可以用于两种消息,成为General Header Field(通用头域)。同理,Request Header Field(请求头域)只用于请求信息,Response Header Field(响应头域)只用于响应消息。格式一般为:
Field-Name: Field-Value

General Header Field

既可以出现在请求消息,也可以出现在响应消息中,只是描述了传递消息的一些属性,而不能用于描述传送文件的信息。

种类 例子 解释
Cache-Control Cache-Control:no-cache 制定一种缓冲机制,该机制将覆盖默认的缓冲机制。
Date Date:Tue,13 Nov 2007 08:12:31 GMT 表示消息生成时的日期时间,日期格式必须符合HTTP日期格式。
Pragma Pragma:"string" 用于指定一些实现相关的参数。
Transfer-Encoding Transfer-Encoding:chuncked 如果该头域被指定,那就说明消息体采用了所指定的传输类型进行传输。chunked表示采用分块传输、

Request Header Field

只出现在请求消息中,通常被客户机用于向服务器传递一些客户机的信息或者请求消息的信息。

种类例子解释
AcceptAccept:text/html,text/plain,image/*表示客户机浏览器接受html和纯文本以及各种图片格式。
Accept-CharsetAccept-Charset:iso-8859-1, gb2312表示客户机浏览器接受ISO-8859-1(就是ASCII编码)和gb2312的字符编码格式。
Accept-EncodingAccept-Encoding:gzip,identity表示客户机浏览器接受gzip压缩方式和不压缩
Accept-LanguageAccept-Language:zh-CN表示客户机浏览器接受简体中文。
FromFrom:user@company.com表示提交该请求的终端用户的电子邮件为user@company.com
HostHost:www.csai.cn指示Internet上的一个主机和端口号,主机通常是域名或者IP地址。
RefererReferer:http://www.csai.cn/index.htm客户机告诉服务器,请求中的Request-URI是如何获得的。例子表示当前请求资源的URI是从页面http://www....中获得的。
User-AgentMozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1; SV1)表示客户机是使用Mozilla/4.0兼容浏览器、IE6.0等。

Response Header Field

通常只出现在响应消息中,通常被服务器向客户机传递一些服务器的信息或者关于响应消息的消息。

Location
当响应消息的响应码为3XX时,该头域会被响应消息用于指示重定向后新的URL。
Retry-After
通常用于响应码为503的响应消息。503表示当前服务器不可用。该头域估计了一个服务器不可用的时间。如果是HTTP日期,那么表示直到日期之前不可用。如果是整数,表示XX秒之后重试。

Entity Header Field

描述了消息体中携带的数据的元数据,如对数据的长度、类型、修改时间等属性的描述信息。请求和响应均可以包含这类头域。

Allow
表示Request-URI指定的资源实体所支持的HTTP方法列表。如Allow:GET,HEAD,PUT
Content-Encoding
表示消息内容的编码方法,通常指示内容的压缩算法。如Content-Encoding:gzip
Content-Language
表示消息内容所采用的自然语言。
Content-Length
表示消息长度,十进制,单位为字节。
Content-Type
表示消息体中内容的媒体格式。如Content-Type:text/html;charset=iso-8859-1表示消息体中携带的内容是html文档,媒体格式为text大类中的HTML子类,编码方式为ISO-8599-1。
Expires
指定一个日期,表示消息体中的内容在该日期之前有效,过了该日期则消息内容就过时了。
Last-Modified
表示消息中携带的内容实体的最后修改时间。
posted @ 2014-04-24 23:27  而远之  阅读(272)  评论(0编辑  收藏  举报