文章是学习记录使用,摘自《HTTP权威指南》
报文是如何流动的;
HTTP报文的三个组成部分(起始行、首部和实体的主体部分)﹔请求和响应报文之间的区别;
请求报文支持的各种功能(方法)﹔和响应报文一起返回的各种状态码;
各种各样的HTTP首部都是用来做什么的。
所有的HTTP报文都可以分为两类:请求报文(request message)和响应报文(response message)。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求和响应报文的基本报文结构相同。
1.请求行
请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求URL,这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。
2.响应行
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。
3.方法
请求的起始行以方法作为开始,方法用来告知服务器要做些什么。比如,在行“GET /specials/saw-blade.gif HTTP/1.o”中,方法就是GET。
HTTP规范中定义了一组常用的请求方法。比如,GET方法负责从服务器获取一文档,POST方法会向服务器发送需要处理的数据,OPTIONS方法用于确定Web服务器的一般功能,或者 Web服务器处理特定资源的能力。
4.状态码
方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。
状态码位于响应的起始行中。比如,在行 HTTP/1.0 200 OK中,状态码就是200。
可以通过三位数字代码对不同状态码进行分类。200到299之间的状态码表示成功。300到399之间的代码表示资源已经被移走了。400到499之间的代码表示客户端的请求出错了。500到599之间的代码表示服务器出错了。
5.原因短语
原因短语是响应起始行中的最后一个组件。它为状态码提供了文本形式的解释。比如,在行HTTP/1.0 200 OK中,OK就是原因短语。
原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。
6.版本号
版本号会以HTTP/x.y的形式出现在请求和响应报文的起始行中。为HTTP应用程序提供了一种将自己所遵循的协议版本告知对方的方式。
使用版本号的目的是为使用HTTP的应用程序提供一种线索,以便互相了解对方的能力和报文格式。在与使用HTTP 1.1的应用程序进行通信的HTTP 1.2应用程序应该知道,它不能使用任何新的1.2特性,因为使用老版本协议的应用程序很可能无法实现这些特性。
注意,版本号不会被当作分数来处理。版本中的每个数字(比如HTTP/1.0中的1和0)都会被当作一个单独的数字来处理。因此,在比较HTTP版本时,每个数字都必须单独进行比较,以便确定哪个版本更高。比如,HTTP/2.22就比HTTP/2.3的版本要高,因为22比3大。
1.首部分类
HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部。HTTP首部可以分为以下几类。
·通用首部
既可以出现在请求报文中,也可以出现在响应报文中。
·请求首部
提供更多有关请求的信息。
·响应首部
提供更多有关响应的信息。
·实体首部
描述主体的长度和内容,或者资源自身。
·扩展首部
规范中没有定义的新首部。
每个HTTP首部都有一种简单的语法:名字后面跟着冒号(😃,然后跟上可选的空格,再跟上字段值,最后是一个CRLF。
3.2.4实体的主体部分
HTTP报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷就是HTTP 要传输的内容。
HTTP报文可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。