HTTP协议在规范文档里详细定义了报文的格式,规定了组成部分,解析规则,还有处理策略,所以可以在 TCP/IP层之上实现更灵活丰富的功能,例如连接控制,缓存管理、数据编码、内容协商等等。
拿TCP报文来举例,它在实际要传输的数据之前附加了一个20字节 的头部数据,存储TCP协议必须的额外信息,例如发送方的端口号、接收方的端口号、包序号、标志位等等。有了这个附加的TCP头,数据包才能够正确传输,到了目的地后把头部去掉,就可以拿到真正的数据。
HTTP协议也是与TCP/UDP类似,同样也需要在实际传输的数据前附加一些头数据,不过与TCP/UDP不同的 是,它是一个“ 纯文本 ”的协议,所以头数据都是ASCII码的文本.
HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:
这其中前两部分起始行和头部字段经常又合称为“ 请求头 ”或“ 响应头 ”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“ body ”。
HTTP协议规定报文 必须有header ,但可以 没有body ,而且在header之后必须要有一个“空行”,也就 是“ CRLF ”,十六机制的“0D0A”。
了解了HTTP报文的基本结构后,我们来看看请求报文里的起始行也就是请求行(request line),它简要地描述了客户端想要如何 *** 作服务器端的资源。
请求行由三部分构成:
这三个部分通常使用空格(space)来分隔,最后要用CRLF换行表示结束。
看完了请求行,我们再看响应报文里的起始行,在这里它不叫“响应行”,而是叫“状态行”(status line),意思是服务器响应的状态。
比起请求行来说,状态行要简单一些,同样也是由三部分构成:
请求行或状态行再加上头部字段集合就构成了HTTP报文里完整的请求头或响应头
头部字段是key-value的形式,key和value之间用“:”分隔,最后用CRLF换行表示字段结束。比如在“Host: 127.0.0.1”这一行里key就是“Host”,value就是“127.0.0.1”。HTTP头字段非常灵活,不仅可以使用标准里的Host、Connection等已有头, 也可以任意添加自定义头 ,这 就给HTTP协议带来了无限的扩展可能。
[toc]
HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块的形式是文本形式的元信息(meta-information)开头,这些信息描述了报文的内容及含义,后面跟着 可选 的数据部分。
HTTP报文是简单的数据块。每一条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。它们都由三部分组成;对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的,包含数据的主体(body)部分。
起始行和首部是由分隔的ASCII文本,每行都以一个有两个字符组成的行终止符作为结束,分别是:
这两个符号可以简写为CRLF。
实体的主体或者报文的主体是一个可选的数据块。与起始行和首部不同的是,主体中可以包含二进制数据,也可以为空。
其中,首部中给出了一些与主体先关的信息。
所有的报文可以分为两类:请求报文(request message)和响应报文(response message)。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求报文和响应报文的结构很相似。
请求报文的格式如下:
这是响应报文的格式:
注意, 请求报文和响应报文只有起始行的语法不同 。
请求的起始行以方法作为开始,用来告诉服务器要做些什么。
下面的是HTTP常用的方法
方法是用来告诉服务器做什么事情的,状态码则是告诉客户端,发生了什么事情。
状态码位于响应的起始行。比如,在行HTTP/1.0 200 OK中,状态码就是200。
下表列出了状态码的分类。
原因短语,它为状态码提供了文本形式的解释。比如在HTTP/1.0 OK 中OK就是原因短语。
原因短语是和状态码成对出现的。原因短语是状态码的可读版本。
HTTP首部分为如下几类:
常见的首部如下实例
为HTTP报文提供最基本信息的首部被称为通用首部。也就是基本上所有的报文都会有的。
HTTP/1.0引入了第一个允许HTTP应用缓存对象副本的本地副本首部,这样就不用需要总是从源端服务器获取了。
请求首部指示在请求报文中有意义的首部,用于说明是谁在发送请求、请求来自何处。
常用的请求信息首部如下:
Accept首部为客户端提供了告知服务器自己的喜好和能力,包括它们想要什么,可以使用什么。
有时客户端希望为请求加上某些限制。
常用的如下:
HTTP本身就支持一种简单的机制,可以对请求进行质询/响应认证。这种机制要求客户端在获取特定资源之前,先对自身进行认证,这样就可以使得HTTP请求变得安全。
下面列出了关于安全的首部:
响应首部可以为客户端提供一些信息,比如谁在发送响应,响应者的功能等。
常见的响应首部如下:
HTTP 报文中的实体的主体是可选的。实体的主体是HTTP报文的负荷。就是HTTP传输的东西。
HTTP报文可以承载很多类型的数据:图片、视频,文本等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)