1,什么是http报文?
上一节我们了解到数据在浏览器和服务器之间进程传送,这些数据被称为报文流,报文流有流入流出之分,当然在也有上游和下游,这些都是来确定报文的流向。
报文的流向都是向下,而不会回流,比如下图:
2,报文的组成
直观的看一报文的组成。
请求报文:
响应报文:
(1)请求报文的格式:
<method> <request-URL> <version> --起始行请求行<headers> --首部 <entity-body> --主体 |
(a)起始行:
method:请求的起始行以方法作为开始,方法用来告知服务器要做些什么。
比如请求报文里面第一个单词POST,其实它就是个方法,它的含义是向服务器发送需要处理的数据。
request-URL:请求URL描述了要对哪个资源执行操作。比如上面请求报文里面的这一部分。
version:请求行中还包含HTTP 的版本,用来告知服务器,客户端使用的是哪种HTTP。
(b)首部:
HTTP 首部字段向请求报文中添加了一些附加信息。本质上来说,它们只是一些名/ 值对的列表。
常用首部:
(c)主体:
HTTP 报文的第三部分是可选的实体主体部分。实体的主体是HTTP 报文的负荷。就是HTTP 要传输的内容。
(2)响应报文的格式:
<version> <status> <reason-phrase> --起始行响应行 <headers> <entity-body> |
注意响应报文的格式里面只有第一部分不同,即请求报文的请求行和响应报文的响应行的内容格式不同,其余格式相同。
响应行:,第一个version是响应使用的http版本,第二个status是数字状态码,第三个是原因短语reason-phrase
3,重点梳理
从上面的分析可以看出报文无非就那几块,起始行(包含请求行和响应行):请求行包含一个方法,它告诉服务器要进行什么操作,当然接下来就是对具体哪个位置的资源进行操作了,后面就是版本号了。响应行包含一个版本,该版本后面跟一个状态码和一个原因短语。
方法总结:
(1)GET方法通常请求服务器发送某资源给请求方。
(2)HEAD方法和GET方法类似,也是请求服务器返回某些东西,但是区别是head方法不会返回实体部分,这就意味着没有真正获取到服务器的资源,但是它的作用是:
?在不获取资源的情况下了解资源的情况(比如,判断其类型);
? 通过查看响应中的状态码,看看某个对象是否存在;
? 通过查看首部,测试资源是否被修改了。
(3)PUT方法是向服务器写入资源。PUT 方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL 命名的新文档,或者,如果那个URL 已经存在的话,就用这个主体来替代它。
(4)POST方法是向服务器发送数据的,服务器会根据这些数据确定返回什么值。这个在工作中常见的应用就是接入别人的webservice接口,比如说有个短信接口,你只要输入电话号码就会返回通话记录。
(5)DELETE方法当然是从服务器某个位置删除资源的,但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP 规范允许服务器在不通知客户端的情况下撤销请求。
其实还有别的方法,不一一介绍了,但是有一点需要注意的是有个名词叫安全方法,其实就是看哪些方法对服务器有影响,比如GET和HEAD当然是安全的,只是请求不会修改,但是DELETE方法就不一定了,所以说DELETE方法不是安全方法。
至于状态码,不必刻意去记住,查查文档就可以。以上部分图片内容来源于《HTTP权威指南》。