首页 > 代码库 > HTTP协议简介
HTTP协议简介
HTTP(Hyper Text Transfer Protocol):超文本传输协议的缩写。
HTTP报文
HTTP报文是在HTTP应用程序之间发送的数据块。数据块以一些文本形式的元信息(meta-information)开头,这些信息描述了报文的内容及含义,后面跟可选的数据部分。术语“流入”“流出”“上游”及“下游”都是用来描述报文方向的。
HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理(transaction)的方向。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动。
报文的组成部分
报文由3个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。示例 起始行和首部就是由行分隔的ASCII文本。实体的主体或报文的主体(或称为主体)是一个可选的数据块。与起始行和首部不同的是,主体中可以包含文本或二进制数据,也可以为空。
报文的语法
所有的HTTP报文都可以分为两类:请求报文(request message)和响应报文(response message)。请求报文和响应报文的基本报文结构相同。
请求报文的格式:
响应报文的格式:(只有起始行的语法不同)
对各部分的简要描述:
方法(method)
客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD 或 POST。
请求URL(request-URL)
命名了所请求资源,或者URL路径组件的完整URL。
版本(version)
报文所使用的 HTTP 版本
状态码(status-code)
这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。
原因短语(reason-phrase)
数字状态码的可读版本,包含行终止序列之前的所有文本。
首部(header)
可以有零个或多个首部。每个首部都包含一个名字,后跟一个冒号(:),一个可选的空格,和一个值。
实体的主体部分(entity-body)
主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。
请求和响应报文示例
起始行
所有的 HTTP 报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么,响应报文的起始行说明发生了什么。
请求的起始行以方法作为开始,方法用于告诉服务器要做些什么。
常用的 HTTP 方法
状态码:用于告诉客户端,发生了什么事情。可以通过三位数字代码对不同状态码进行分类。200到299之间的状态码表示成功。300到399之间的状态码表示资源已被移走。400到499之间的状态码表示客户端的请求出错了。500到599之间的状态码表示服务器出错了。
状态码分类
常见状态码
原因短语:为状态码提供了文本形式的解释。和状态码成对出现。
首部:跟在起始行后面的就是零、一个或多个 HTTP 首部字段。
首部分类:HTTP 规范定义了几种首部字段。可以分为以下几类:
通用首部:既可以出现在请求报文中,也可以出现在响应报文中。
请求首部:提供更多有关请求的信息。
响应首部:提供更多有关响应的信息。
实体首部:描述主体的长度和内容,或者资源自身。
扩展首部:规范中无定义的新首部。
常见的首部实体
实体的主体部分
HTTP 报文的第三部分是可选的实体主体部分。实体的主体是 HTTP 报文的负荷。
方法
GET:最常用的方法。通常用于请求服务器发送某个资源。
HEAD:与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这允许客户端在未获取实际资源的情况下,对资源的首部进行检查。使用 HEAD,可以:
1、在不获取资源的情况下了解资源的情况(比如 判断其类型);
2、通过查看响应中的状态码,看看某个对象是否存在;
3、通过查看首部,测试资源是否被修改
下图显示了实际的 HEAD 方法
PUT:与 GET 从服务器读取文档相反,PUT 方法会向服务器写入文档。
PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的 URL 命名的新文档,如果那个 URL 已经存在的话,就用这个主体来替换它。
POST:用于向服务器发送数据。通常会用它来支持 HTML 表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方(比如,送到一个服务器网关程序中,然后由这个程序对其进行处理)。 下图显示了一个用 POST 方法发起 HTTP 请求——向服务器发送表单数据——客户端。
TRACE:客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的 HTTP 请求。TRACE 方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。
OPTIONS:该方法请求 Web 服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。下图显示了一个使用 OPTIONS 方法的请求。
DELETE:该方法所做的事情就是请服务器删除请求 URL 所指定的资源。但客户端应用程序无法保证删除操作一定会被执行。因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。下图显示了一个 DELETE 方法示例。
扩展方法:指的就是没有在 HTTP/1.1 规范中定义的方法。下图显示 Web 发布扩展方法示例。
状态码:
状态码为客户端提供了一种理解事务处理结果的便捷方式。
待续。。。
本文出自 “自定义” 博客,请务必保留此出处http://le1988.blog.51cto.com/9172542/1596611
HTTP协议简介