HTTP学习笔记(2)HTTP报文

时间:2021-04-21 21:15:28

1,什么是http报文?

上一节我们了解到数据在浏览器和服务器之间进程传送,这些数据被称为报文流,报文流有流入流出之分,当然在也有上游和下游,这些都是来确定报文的流向。

报文的流向都是向下,而不会回流,比如下图:

HTTP学习笔记(2)HTTP报文

2,报文的组成

直观的看一报文的组成。

请求报文:

HTTP学习笔记(2)HTTP报文

响应报文:

HTTP学习笔记(2)HTTP报文

(1)请求报文的格式:

<method> <request-URL> <version>           --起始行请求行<headers>                                             --首部
<entity-body>                                        --主体

(a)起始行:HTTP学习笔记(2)HTTP报文

method:请求的起始行以方法作为开始,方法用来告知服务器要做些什么。

比如请求报文里面第一个单词POST,其实它就是个方法,它的含义是向服务器发送需要处理的数据。

HTTP学习笔记(2)HTTP报文

request-URL:请求URL描述了要对哪个资源执行操作。比如上面请求报文里面的HTTP学习笔记(2)HTTP报文这一部分。

version:请求行中还包含HTTP 的版本,用来告知服务器,客户端使用的是哪种HTTP。

(b)首部:

        HTTP学习笔记(2)HTTP报文

         HTTP 首部字段向请求报文中添加了一些附加信息。本质上来说,它们只是一些名/ 值对的列表。

常用首部:

HTTP学习笔记(2)HTTP报文

(c)主体:

        HTTP学习笔记(2)HTTP报文

       HTTP 报文的第三部分是可选的实体主体部分。实体的主体是HTTP 报文的负荷。就是HTTP 要传输的内容。

(2)响应报文的格式:

<version> <status> <reason-phrase>         --起始行响应行
<headers>
<entity-body>

注意响应报文的格式里面只有第一部分不同,即请求报文的请求行和响应报文的响应行的内容格式不同,其余格式相同。

响应行:HTTP学习笔记(2)HTTP报文,第一个version是响应使用的http版本,第二个status是数字状态码,第三个是原因短语reason-phrase

3,重点梳理

从上面的分析可以看出报文无非就那几块,起始行(包含请求行和响应行):请求行包含一个方法,它告诉服务器要进行什么操作,当然接下来就是对具体哪个位置的资源进行操作了,后面就是版本号了。响应行包含一个版本,该版本后面跟一个状态码和一个原因短语。

方法总结:

(1)GET方法通常请求服务器发送某资源给请求方。

HTTP学习笔记(2)HTTP报文

(2)HEAD方法和GET方法类似,也是请求服务器返回某些东西,但是区别是head方法不会返回实体部分,这就意味着没有真正获取到服务器的资源,但是它的作用是:

•在不获取资源的情况下了解资源的情况(比如,判断其类型);
        • 通过查看响应中的状态码,看看某个对象是否存在;
        • 通过查看首部,测试资源是否被修改了。

HTTP学习笔记(2)HTTP报文

(3)PUT方法是向服务器写入资源。PUT 方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL 命名的新文档,或者,如果那个URL 已经存在的话,就用这个主体来替代它。

HTTP学习笔记(2)HTTP报文

(4)POST方法是向服务器发送数据的,服务器会根据这些数据确定返回什么值。这个在工作中常见的应用就是接入别人的webservice接口,比如说有个短信接口,你只要输入电话号码就会返回通话记录。

HTTP学习笔记(2)HTTP报文

(5)DELETE方法当然是从服务器某个位置删除资源的,但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP 规范允许服务器在不通知客户端的情况下撤销请求。

HTTP学习笔记(2)HTTP报文

其实还有别的方法,不一一介绍了,但是有一点需要注意的是有个名词叫安全方法,其实就是看哪些方法对服务器有影响,比如GET和HEAD当然是安全的,只是请求不会修改,但是DELETE方法就不一定了,所以说DELETE方法不是安全方法。

至于状态码,不必刻意去记住,查查文档就可以。以上部分图片内容来源于《HTTP权威指南》。