文章插图
如果说HTTP是因特网的信使 , 那么HTTP报文就是它用来搬东西的包裹了 。HTTP报文是在HTTP应用程序之间发送的简单的格式化数据块 , 每条报文都包含一条来自客户端的请求 , 或者一条来自服务器的响应 。它们由三个部分组成:由起始行、首部和实体的主体部分 。本文将主要介绍HTTP报文起始行
文章插图
报文语法
所有的HTTP报文都可以分为两类:请求报文(request message)和响应报文(response message) 。请求报文会向Web服务器请求一个动作 , 响应报文会将请求的结果返回给客户端 。请求和响应报文的基本报文结构相同
文章插图
请求报文的格式:
<method> <request-URL> <version><headers><entity-body>响应报文的格式:
<version><status><reason-phrase><headers><entity-body>【方法(method)】
客户端希望服务器对资源执行的动作 。是一个单独的词 , 比如GET、HEAD或POST
【请求 URL(request-URL)】
命名了所请求资源 , 或者URL路径组件的完整URL
【版本(version)】
报文所使用的HTTP版本 , 格式如下:
HTTP/<major>.<minor>其中主要版本号(major)和次要版本号(minor)都是整数
【状态码(status-code)】
这三位数字描述了请求过程中所发生的情况 。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)
【原因短语(reason-phrase)】
数字状态码的可读版本 , 包含行终止序列之前的所有文本
【首部(header)】
可以有零个或多个首部 , 毎个首部都包含一个名字 , 后面跟着一个冒号(:) , 然后是一个可选的空格 , 接着是一个值 , 最后是一个CRLF 。首部是由一个空行(CRLF)结束的 , 表示了首部列表的结束和实体主体部分的开始
【实体的主体部分(entity-body)】
实体的主体部分包含一个由任意数据组成的数据块 。并不是所有的报文都包含实体的主体部分 , 有时 , 报文只是以一个CRLF结束
分类
所有的HTTP报文都以一个起始行作为开始 。请求报文的起始行说明了要做些什么 , 响应报文的起始行说明发生了什么 。下面将详细介绍起始行的内容
请求行
请求报文请求服务器对资源进行一些操作 。请求报文的起始行 , 或称为请求行 , 包含了一个方法和一个请求URL , 这个方法描述了服务器应该执行的操作 , 请求URL描述了要对哪个资源执行这个方法 。请求行中还包含HTTP的版本 , 用来告知服务器 , 客户端使用的是哪种HTTP 。所有这些字段都由空格符分隔
响应行
响应报文承载了状态信息和操作产生的所有结果数据 , 将其返回给客户端 。响应报文的起始行 , 或称为响应行 , 包含了响应报文使用的HTTP版本、数字状态码 , 以及描述操作状态的文本形式的原因短语 。所有这些字段都由空格符进行分隔
方法
请求的起始行以方法作为开始 , 方法用来告知服务器要做些什么
HTTP常用方法共以下8种
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获取报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理GET
【初识HTTP报文】GET是最常用的方法 。通常用于请求服务器发送某个资源
文章插图
文章插图
HEAD
HEAD方法与GET方法的行为很类似 , 但服务器在响应中只返回首部 。不会返回实体的主体部分 。这就允许客户端在未获取实际资源的情况下 , 对资源的首部进行检査 。使用HEAD , 可以:
1、在不获取资源的情况下了解资源的情况(比如 , 判断其类型);
2、通过査看响应中的状态码 , 看看某个对象是否存在;
推荐阅读
- MySQL 优化实施方案
- TCP/IP协议分为哪四层,具体作用是什么?http与tcp区别
- 初识铁观音,品茶
- linux下如何自动提升权限
- 详解Https是如何确保安全的
- 使用Python搭建http服务器
- 教你如何防御CC攻击
- Python:如何判断一个url是以http开头的?
- HTTPS 的工作原理
- HTTP,TCP的长连接和短连接以及socket