HTTP报文
HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的**元信息**(meta-information)开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理之间流动。
报文的组成部分
不论是请求还是响应,由三部分组成;
起始行(start line)、包含属性的首部(header)块,可选的、包含数据的主体(body)
起始行和首部就是由行分隔的ASCII文本。每行都以一个由两个字符组成的行终止序列作为结束,其中包括一个回车符(ASCII码13)和一个换行符(ASCII码10)。 这个行终止序列可以写做CRLF.需要指出的是,尽管HTTP规范中说明应该用 CRLF来表示行终止,但稳健的应用程序也应该接受单个换行符作为行的终止。有 些老的,或不完整的HTTP应用程序并不总是既发送回车符,又发送换行符。
报文的语法
分为:【**请求报文和响应报文**】
浏览器发起HTTP请求的典型场景与ABNF定义HTTP协议格式
HTTP的协议格式
ABNF(扩充巴科斯-瑙尔范式)操作符
ABNF的核心规则
基于ABNF描述的HTTP协议格式 + 具体实例
起始行 【Start-line】
请求行 【Request-line】
请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求URL,这个方法描述了服务器应该执行的操作,请求URL 描述了要对哪个资源执行这个方法。请求行中还包含HTTP的版本,用来告知服务 器,客户端使用的是哪种HTTP。
响应行 【Response-line】
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。
对起始行和响应行中的具体内容进行描述
方法
方 法 | 描 述 | 是否包含主体 | |
---|---|---|---|
GET | 从服务器获取一份文档 | 否 | |
HEAD | 只从服务器获取文档的首部 | 否 | |
POST | 向服务器发送需要处理的数据 | 是 | |
PUT | 将请求的主体部分存储在服务器上 | 是 | |
TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 | |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 | |
DELETE | 从服务器上删除–份文档 | 否 |
HEAD: lHEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检査。
- 在不获取资源的情况下了解资源的情况(比如,判断其类型)
- 通过査看响应中的状态码,看看某个对象是否存在
- 通过査看首部,测试资源是否被修改了。
PUT:PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名 的新文档,或者,如果那个URL已经存在的话,就用这个主体来替代它。
因为PUT允许用户对内容进行修改,所以很多Web服务器都要求在执行PUT之 前,用密码登录。
POST:POST方法起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML 的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。
状态码
方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。 状态码位于响应的起始行中。
整体范围 | 已定义范围 | 分 类 |
---|---|---|
100 ~ 199 | 100 ~ 101 | 信息提示 |
200 - 299 | 200 〜206 | 成功 |
300 ~ 399 | 300 ~ 305 | 重定向 |
400 ~ 499 | 400 ~ 415 | 客户端错误 |
500 ~ 599 | 500 ~ 505 | 服务器错误 |
【**原因短语**】:原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者 将其传送给用户,用以说明在请求期间发生了什么情况。
首部 【header-field】
每个HTTP首部都有-种简单的语法:名字后面跟着冒号(:),然后跟上**可选的空格**,再跟上字段值,最后是一个CRLF。
首部实例 | 描 述 |
---|---|
Date:Tue,30ct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length:15040 | 实体的主体部分包含了 15 040字节的数据 |
Content-type:image/gif | 实体的主体部分是一个GIF图片 |
首部延续行:
将长的首部行分为多行可以提高可读性,多出来的每行前面至少要有一个空格或制表符(tab)。
Messege-body
HTTP报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷。 就是HTTP要传输的内容。