HTTP报文

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要传输的内容。

谢谢你的支持哦,继续加油.