首页 > 代码库 > 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协议简介