HTTP报文
以一些文本形式的元信息开头,描述了报文的内容及含义,后面跟着可选的数据部分,在客户端,服务器,和代理之间流动。
用报文流入,流出源端服务器来描述事务处理的方向。上游,下游,所有报文都会流向下游,所有报文的发送者都在接收者的上游。
报文组成
每个报文都包含一条请求或响应。包括:
对报文进行描述的起始行,包含属性的首部,以及可选的包含数据的主体部分。起始行和首部是文本。主体可以包含文本或二进制数据,也可以为空。
报文的语法
请求报文和响应报文。请求报文和响应报文基本结构相同。
请求报文
头:<method> <request-URL> <version>
首部:<headers>
主体:<entity-body>
响应报文
头:<version> <status> <reason-phrase>
首部:<headers>
主体:<entity-body>
起始行
请求报文起始行说明要做些什么,响应报文起始行说明发生什么。
请求行:含一个方法(GET),一个请求URL(/test/index.txt),一个版本(HTTP/1.1)。
响应行:HTTP版本,数字状态码,文本原因短语。
HTTP方法
GET 从服务器获取一份文档
HEAD 只从服务器获取文档首部
POST 向服务器发送需要处理的数据 包含主体
PUT 将请求的主体部分存储在服务器上 包含主体
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
OPTIONS 决定可以在服务器上执行哪些方法
DELETE 从服务器上删除一份文档
并不是所有服务器都有这些方法,由于HTTP易于扩展,所以有的服务器还会有自己的方法。被称为扩展方法。
状态码
100~199 信息提示
100~299 成功
300~399 重定向
400~499 客户端错误
500~599 服务器错误
当遇到不认识的状态码的时候,可能是作为扩展定义的,可以将其作为所处范围内的一个普通成员。
原因短语和状态码是成对出现的
版本号以HTTP/x.y的形式出现在请求和响应报文的起始行中。告知对方自己的协议版本。比如HTTP/2.22比HTTP/2.3的版本要高,因为22比3大。
首部
HTTP规范定义了几种首部字段,应用程序也可以随意发明自己的首部
通用首部,可以出现在请求报文中,也可以出现在响应报文中。
请求首部,提供更多有关请求信息。
响应首部,提供更多有关响应信息。
实体首部,描述主体长度和内容,或者资源自身。
扩展首部,规范中没有定义的新首部。
首部延续行,将长的首部行分为多行提高可读性。
安全方法
就是在服务器上不会产生动作的方法,不会在服务器上产生什么结果,比如购物时,提交的post请求在服务器会产生一个支付信用卡的动作。安全方法也不一定什么动作都不执行,由开发者决定。
HEAD方法
只返回首部。可以不获取资源了解资源情况,通过状态码看资源是否存在,通过首部看是否被修改了。
PUT方法
向服务器写入文档,通过URL在服务器创建一个新文档,将内容放进去。但是在操作之前可能会有密码认证。
POST方法
通常用它来支持HTML的表单。表单中填好的数据被送给服务器,服务器再把它发送到要去的地方进行处理。
POST用于向服务器发送数据,PUT用于向服务器上存储数据。
TRACE方法
允许客户端在最终将请求发送给服务器时,查看可能由每个中间节点被修改的原始HTTP请求,和最终的样子。
OPTIONS方法
请求web服务器告知其支持哪些方法。从而客户端不用实际访问那些资源就可以判定访问各种资源的最优方式。返回的是服务器支持的各种方法。
DELETE方法
请服务器删除请求URL所指定的资源。但是无法保证删除操作一定会被执行。因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。
网友评论