HTTP报文--《HTTP权威指南》
2020-05-10 本文已影响0人
指露为码
报文流
HTTP报文是HTTP应用程序之间发送的数据块,这些数据块以文本形式的元信息开头,描述报文内容、含义、以及可选数据;
从一个客户端发出请求报文到服务器返回响应报文,都是向下游流动,即没有报文是逆向流动的,所有报文的发送者都在接受者的上游;
报文组成
报文可以分为两类:请求报文和响应报文
报文的组成部分:起始行(描述报文)、首部块(包含属性)、主体(可选、包含数据)
请求报文与响应报文
请求报文:一般为客户端向服务器请求的数据
响应报文:服务器将结果返回给客户端
- 区别:只有起始行的语法有所不同
请求报文
<method><request-URL><version>
<headers>
<entity-body>
响应报文
<version> <status><reason-phrase>
<headers>
<entity-body>
各部分名词解释
- method:客户端希望对服务器资源执行的动作,例如GET、POST等
- request-URL:对请求资源命名,或路径完整的URL
- version:HTTP版本,格式:HTTP/<major>.<minor>;major主版本号,minor次版本号
- status-code 状态码:描述请求过程中发生的情况,比如成功,失败,重定向等等;
- reason-phrase 状态短语 状态码的刻度版本,包含行终止序列之前的所有文本,只对人类有意义
- headers:首部
- entity-body:实体的主体部分,包含任意数据组成的数据块,也可能是CRLF的结束
报文具体组成
起始行:请求报文起始行说明要做什么,响应报文起始行说明发生了什么
- 请求行(请求行):对服务器资源的操作,包含一个方法(服务器应执行的操作)和一个请求URL(对哪个资源执行该方法)以及HTTP版本
- 响应行:服务器将状态信息和结果数据返回给客户端,包含HTTP版本,数字状态码,以及原因短语
- 方法:告知服务器应该做什么操作,其中POST、PUT包含主体
- 状态码:服务器告知客户端发生了什么事,
- 原因短语
- 版本号
首部
首部分类
- 通用首部:客户端与服务器都可以使用,例如Date、Connection、Update等
- 请求首部:请求报文特有的;例如Client-IP、Host、Referer等,还可细分为Accept首部、条件请求首部、安全请求首部、代理请求首部
- 响应首部:响应报文特有,协助客户端处理响应,可细分为协商首部、安全响应首部
- 实体首部:用于应对实体主体的首部,提供了有关实体及其内容的信息,可分为内容首部以及实体缓存首部;
- 扩展首部:非标准首部、开发者自己创建
实体的主体部分
实体的主体是HTTP报文要传输的内容,包括多种类型的数字数据等;
各类方法
安全方法:不会对服务器产生影响,不引起服务端的变化,GET与HEAD都是安全的
- GET:请求服务器发送资源
- HEAD:与GET类似,但服务器在响应中只返回首部,不返回实体主体,先对资源首部进行检查,判断其类型、查看对象是否存在、测试资源是否被修改
- PUT:向服务器写入数据
- POST:向服务器输入数据,以及用来支持HTML表单
- TRACE:需要跨过防火墙、代理、网关等需要被修改的时候用到它
- OPTIONS:查询服务器支持哪些方法
- DELETE:请求服务器删除URL指定的资源
- 扩展方法:未在HTTP/1.1规范中定义的方法,扩展的手段,常用:LOCK(锁定)MKCOL(用户创建自有)COPY(复制资源)MOVE(移动资源)
状态码
- 100~199:信息状态码
- 200~299:成功状态码
- 300~399:重定向状态码
- 400~499:客户端错误状态码
- 500~599:服务端错误状态码