HTTP权威指南笔记-HTTP报文组成部分

mervyn 2018年11月21日14:09:40计算机网络HTTP权威指南笔记-HTTP报文组成部分已关闭评论971

目录

报文的语法

每条报文都包含一条来自客户端的请求或者服务端的响应。由以下三部分组成:文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 起始行
  • 包含属性的首部块
  • 以及可选的、包含数据的主体部分

所有的HTTP报文都可以分为两类: 请求报文响应报文文章源自编程技术分享-https://mervyn.life/72155f3e.html

请求报文的格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html

<method> <request url> <version>
<headers>
\r\n
<entity-body>

响应报文的格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html

<version> <status-code> <reason-phrase>
<headers>
\r\n
<entity-body>
  • 方法(method)

客户端希望服务器对资源执行的动作。GET 、 POST 之类的。文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 请求URL (request url)
  • 版本(version)

报文所使用的HTTP版本,格式如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html

HTTP/<major>.<minor>

其中主要版本号和次要版本号都是整数。文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 状态码(status-code)文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 原因短语(reason-phrase)文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 首部(header)文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 实体的主体部分(entity-body)文章源自编程技术分享-https://mervyn.life/72155f3e.html

下图展示了一个请求和响应的示例:文章源自编程技术分享-https://mervyn.life/72155f3e.html

HTTP权威指南笔记-HTTP报文组成部分文章源自编程技术分享-https://mervyn.life/72155f3e.html

起始行

所有的报文都需要以一个起始行作为开始。文章源自编程技术分享-https://mervyn.life/72155f3e.html

请求行

请求报文的起始行,或称为请求行,包含了一个方法和一个请求URL。请求行还包含HTTP的版本,用来告知服务器客户端使用的是哪个版本的HTTP。文章源自编程技术分享-https://mervyn.life/72155f3e.html

所有的字段由空格符分隔。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html

GET /test HTTP/1.1

响应行

响应报文的起始行,或称响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。文章源自编程技术分享-https://mervyn.life/72155f3e.html

所有的字段由空格符分隔。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html

HTTP/1.0 200 OK

方法

请求的起始行以方法作为开始,用来告知服务器要做些什么。常见HTTP方法如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html

HTTP方法 描述 是否包含主体
GET 从服务器获取一份文档
HEAD 只从服务器获取文档首部
POST 向服务器发送要处理的数据
PUT 将请求的主体部分存储在服务器上
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
OPTIONS 决定可以在服务器上执行哪些方法
DELETE 从服务器删除一份文档

状态码

用来告诉客户端,发生了什么。状态码位于响应的起始行中。如:文章源自编程技术分享-https://mervyn.life/72155f3e.html

HTTP/1.0 200 OK

其中,状态码就是200文章源自编程技术分享-https://mervyn.life/72155f3e.html

状态分类如下:文章源自编程技术分享-https://mervyn.life/72155f3e.html

整体范围 已定义范围 分类
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客户端错误
500~599 500~505 服务器错误

首部

首部分类

首部有如下几种分类:文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 通用首部

既可以在请求报文,也可以在响应报文文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 请求首部

提供更多的有关请求的信息文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 响应首部

提供更多的响应信息文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 实体首部

描述主体的长度和内容,或者资源自身文章源自编程技术分享-https://mervyn.life/72155f3e.html

  • 扩展首部

每个HTTP首部都有一个简单的语法:名字后边跟着冒号(:),然后跟上可选的空格,在跟上字段值,最后是一个CRLF文章源自编程技术分享-https://mervyn.life/72155f3e.html

例:文章源自编程技术分享-https://mervyn.life/72155f3e.html

Content-length: 1540
Content-type: image/gif

首部延续行

有些长的首部可以分为多行以提高可读性,多出来的每行都要至少有个 空格 或者 tab文章源自编程技术分享-https://mervyn.life/72155f3e.html

实体的主体部分

HTTP要传输的内容文章源自编程技术分享-https://mervyn.life/72155f3e.html

weinxin
我的微信公众号
微信扫一扫
mervyn