本章了解内容
HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理的方向。报文流入源端服务器,工作完成之后,会流回用户的Agent代理中。
HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有的报文都会向下游流动。所有的报文发送者都在接受者的上游。
HTTP报文是简单的格式化数据块。包含三个部分:起始行(start line)、属性的首部(header)、包含数据的主体(body)。
请求报文的格式
响应格式的报文
下面对各个部分简要概述
method:客户端希望服务器对资源执行的操作。如get,head,post
request-URL:命名了所请求的资源
version:报文所使用的HTTP版本
status-code:三个数字描述请求中所发生的情况。
原因短语(reason-phrase):数字状态码的可读版本
首部(headers)可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号:
实体的主体部分(entiy-body):
所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明要干什么。响应报文的起始行说明发生了什么。
1.请求行
请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称请求行,包含了一个方法和一个请求的URL,请求行还包含了HTTP的版本。
2.响应行
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端,响应报文的起始行,或称响应行,包含了HTTP版本,响应码,和原因短语。
3.方法
有些请求方法的请求报文中有主体,有些没有
并不是所有服务器都实现了这7中方法,而且HTTP设计的易于扩展,所以除了这些方法之外,服务器还会实现
一些自己的请求方法。这些附加方法是对HTTP 规范的扩展。
4.状态码
状态码是告诉客户端,发生了什么事情,状态码位于响应的起始行中,比如状态吗200,。
5.原因短语
原因短语和状态码是成对出现的,原因短语是状态吗的可读版本。
6.版本号
版本号说明了应用程序支持的最高HTTP版本。
HTTP首部字段向请求和响应报文中添加了一些附加信息,本质上说他们只是一些键值对。
1.首部分类
HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部字段。HTTP首部可以分为以下几类
既可以出现在请求报文中,也可以出现在响应报文中。
提供更多有关请求的信息。
提供更多关于响应的信息。
描述主体的长度和内容,或者是资源本身。
规范中没有定义的新首部
每个HTTP首部都有一个简单的语法:名字后面跟着冒号:然后跟上可选的空格,再跟上字段值
实体的主体部分是报文的负荷,就是HTTP要传输的内容
HTTP报文可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。
HTTP定义了一组被称为安全方法的方法。GET方法和HEAD方法都被认为是安全的,这就意味着使用GET或HEAD方法的HTTP方法都不会产生什么动作。不产生动作意味着HTTP请求在服务器上不会产生什么结果。
GET是最常用的方法。通常请求服务器发送某个资源
HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部,不会返回实体的主体部分。这允许客户端在未获得实体的情况下对首部进行检验。使用HEAD方法,可以
服务器开发者必须确保返回的首部和GET请求返回的首部完全相同。遵循HTTP/1.1规范,就必须实现HEAD方法。
PUT方法会向服务器写文档
PUT方法的语意就是让服务器用请求的主体部分,来创建一个由请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用这个新主体代替它。
因为PUT允许用户对内容进行修改,所以很多WEB服务器要求执行PUT方法之前,用密码登陆。
POST方法起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单,表单填好的数据通常会被送给服务器,然后服务器将其发送到它要去的地方。
客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。没个中间节点可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。
TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹会一条TRACE响应,并在响应主体中携带它收到的原始请求报文。
TRACE方法主要用于诊断;也就是说用于验证是否如愿穿过了请求/响应链。
TRACE请求中不能带有实体的主体部分。
OPTIONS方法请求Web服务器告知其支持的各种功能。他可以访问服务器通常支持哪些方法,或者针对某些特定的资源支持哪些特定的操作。
这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就可以判定访问这些资源的最优方式。
DELETE方法所做的事情就是请服务器删除请求URL所指定的资源;但是客户端无法确保删除操作一定会被执行。
因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。
HTTP被设计成字段可扩展的,这样新的特性就不会使老的软件失效了。扩展方法指的是没有在HTTP/1.1规范中定义的方法,服务器会为他所管理的资源实现一些HTTP服务,这些方法为开发者提供了一些扩展HTTP服务能力的手段。