HTTP报文格式 -《HTTP权威指南》阅读笔记

        HTTP报文是简单的格式化数据块,主要由三个部分组成:起始行、首部、主体。
        所有的HTTP报文都可以分为两类:请求报文、响应报文。

一.起始行

        所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明了要做什么,响应报文的起始行说明发生了什么。
请求报文
        上图是一个请求报文的截图,它的第一行就是起始行,也被称为请求行,它包含了3个部分:方法、URL、HTTP版本号。
        1.方法。方法用来告知服务器要做些什么,有些方法的请求报文中有主体,有些没有。
        上图请求报文使用是其中的GET方法,常用的HTTP方法如下:

方法 描述 是否包含主体
GET 从服务器获取一份文档,如访问某个网站首页
HEAD 只从服务器获取文档的首部,可以用来查看资源是否存在、是否被修改等
POST 向服务器发送需要处理的数据,如form表单数据
PUT 让服务器用请求主体去修改对应URL的内容,如果URL不存在,就创建一个用请求URL命名的新文档
TRACE 对报文进行追踪,目的地服务器会返回一个TRACE响应,并在响应主体中携带原始请求报文
OPTIONS 用来查看服务器支持的通用于各种资源的方法,或者某个指定资源的方法
DELETE 让服务器删除请求URL所指定的资源。但HTTP规范允许服务器在不通知客户端的情况下,撤销请求。

        2.URL。告知服务器要对哪个资源执行请求方法。上图请求报文告知服务器要对根目录下的文件执行GET方法。
        3.HTTP版本号。告知服务器客户端使用的是哪种HTTP。上图请求报文告知服务器,客户端使用的版本是HTTP/1.1。在HTTP/1.0之前,并不要求请求行中包含HTTP版本号。
响应报文
        上图是一个响应报文的截图,它的第一行就是起始行,也被成为响应行,它包含了3个部分:HTTP版本号、状态码、原因短语。
        1.HTTP版本号。表明响应报文使用的是哪种HTTP。上图响应报文表明使用的版本是HTTP/1.1。在HTTP/1.0之前,并不要求响应行中包含HTTP版本号。使用版本号是为了给HTTP应用程序提供判断条件:在与低版本的HTTP应用程序通信时,不能使用任何高版本的新特性。
        2.状态码。告知客户端发生了什么事情。上图响应报文中的200状态码,表明响应成功。目前状态码分类如下:

整体范围 已定义范围 分类
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客户端错误
500~599 500~505 服务器端错误

        当前的HTTP版本只为每类状态码定义了几个代码。如果收到不认识的状态码,可能是人为基于当前协议的扩展定义。可以根据它所处范围,作为那个类别中一个普通成员来处理。
        3.原因短语。原因短语是响应起始行的最后一个组件。它为状态码提供了文本形式的解释,也是和状态码成对出现的,可以用来说明在请求期间发生了什么。

二.首部

        跟在起始行后面的就是首部。HTTP首部字段向请求和响应报文中添加了一些附加信息,它们本质上来说就是一些名/值对的列表。首部和方法配合工作,共同决定了客户端和服务器能做什么事情。
        HTTP规范定义了几种首部字段,应用程序也可以随意发明自己所用的首部。HTTP首部可以分为五个主要的类型:
        1.通用首部。有些首部提供了和报文相关的最基本的信息,它们被称为通用首部。HTTP/1.0后又引入了通用缓存首部,允许HTTP应用程序缓存对象本地副本,这样就不用总是直接从源端服务器获取了。
        2.请求首部。只在请求报文中有意义的首部,用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。
        3.响应首部。只在响应报文中有意义的首部,为客户端提供了一些额外信息,比如谁在发送响应,响应者的功能,甚至与响应相关的一些特殊指令。
        4.实体首部。实体首部提供了有关实体及其内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法。总之,实体首部可以告知报文的接收者它在对什么进行处理。
        5.扩展首部。扩展首部是非标准的首部,由应用程序开发者创建,但还没被添加到已批准的HTTP规范中去。即使不知道这些扩展首部的含义,HTTP程序也要接受它们并对其进行转发。

三.主体

        HTTP报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷,也就是HTTP要传输的内容。HTTP报文可以承载很多类型的数据:图片、视频、HTML文档、软件应用程序等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章