HTTP报文的请求体和方法详解

本章了解内容

  1. 报文时如何流动的
  2. HTTP报文的三个组成部分(起始行,首部和实体的主体部分)
  3. 请求和响应报文之间的区别
  4. 请求报文支持的各种功能
  5. 和响应报文一起返回的各种状态码
  6. 各种各样的HTTP首部都是用来做什么的。

2.1报文流

2.1.1报文流入源端服务器

HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理的方向。报文流入源端服务器,工作完成之后,会流回用户的Agent代理中。

HTTP报文的请求体和方法详解_第1张图片


2.1.2报文向下游流动

HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有的报文都会向下游流动。所有的报文发送者都在接受者的上游。

HTTP报文的请求体和方法详解_第2张图片


2.2报文的组成部分


HTTP报文是简单的格式化数据块。包含三个部分:起始行(start line)、属性的首部(header)、包含数据的主体(body)。

HTTP报文的请求体和方法详解_第3张图片

2.2.1报文的语法

请求报文的格式




响应格式的报文


下面对各个部分简要概述

method:客户端希望服务器对资源执行的操作。如get,head,post

request-URL:命名了所请求的资源

version:报文所使用的HTTP版本

status-code:三个数字描述请求中所发生的情况。

原因短语(reason-phrase):数字状态码的可读版本

首部(headers)可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号:

实体的主体部分(entiy-body):


2.2.2起始行

所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明要干什么。响应报文的起始行说明发生了什么。

1.请求行

请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称请求行,包含了一个方法和一个请求的URL,请求行还包含了HTTP的版本。

2.响应行

响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端,响应报文的起始行,或称响应行,包含了HTTP版本,响应码,和原因短语。

3.方法

有些请求方法的请求报文中有主体,有些没有

HTTP报文的请求体和方法详解_第4张图片

并不是所有服务器都实现了这7中方法,而且HTTP设计的易于扩展,所以除了这些方法之外,服务器还会实现

一些自己的请求方法。这些附加方法是对HTTP 规范的扩展。

4.状态码

状态码是告诉客户端,发生了什么事情,状态码位于响应的起始行中,比如状态吗200,。

HTTP报文的请求体和方法详解_第5张图片


HTTP报文的请求体和方法详解_第6张图片

5.原因短语

原因短语和状态码是成对出现的,原因短语是状态吗的可读版本。

6.版本号

版本号说明了应用程序支持的最高HTTP版本。


2.2.3首部

HTTP首部字段向请求和响应报文中添加了一些附加信息,本质上说他们只是一些键值对。

1.首部分类

HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部字段。HTTP首部可以分为以下几类

  • 通用首部

    既可以出现在请求报文中,也可以出现在响应报文中。

  • 请求首部

    提供更多有关请求的信息。

  • 响应首部

    提供更多关于响应的信息。

  • 实体首部

    描述主体的长度和内容,或者是资源本身。

  • 扩展首部

    规范中没有定义的新首部

每个HTTP首部都有一个简单的语法:名字后面跟着冒号:然后跟上可选的空格,再跟上字段值

HTTP报文的请求体和方法详解_第7张图片


2.2.4实体的主体部分

实体的主体部分是报文的负荷,就是HTTP要传输的内容

HTTP报文可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。


3.3方法

3.3.1安全方法

HTTP定义了一组被称为安全方法的方法。GET方法和HEAD方法都被认为是安全的,这就意味着使用GET或HEAD方法的HTTP方法都不会产生什么动作。不产生动作意味着HTTP请求在服务器上不会产生什么结果。

3.3.2GET

GET是最常用的方法。通常请求服务器发送某个资源

HTTP报文的请求体和方法详解_第8张图片

3.3.3HEAD

HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部,不会返回实体的主体部分。这允许客户端在未获得实体的情况下对首部进行检验。使用HEAD方法,可以

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

服务器开发者必须确保返回的首部和GET请求返回的首部完全相同。遵循HTTP/1.1规范,就必须实现HEAD方法。

HTTP报文的请求体和方法详解_第9张图片


3.3.4PUT

PUT方法会向服务器写文档

HTTP报文的请求体和方法详解_第10张图片

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

因为PUT允许用户对内容进行修改,所以很多WEB服务器要求执行PUT方法之前,用密码登陆。

3.3.5POST

POST方法起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单,表单填好的数据通常会被送给服务器,然后服务器将其发送到它要去的地方。

HTTP报文的请求体和方法详解_第11张图片


3.3.6TRACE

客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。没个中间节点可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。

TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹会一条TRACE响应,并在响应主体中携带它收到的原始请求报文。

HTTP报文的请求体和方法详解_第12张图片

TRACE方法主要用于诊断;也就是说用于验证是否如愿穿过了请求/响应链。

TRACE请求中不能带有实体的主体部分。

3.3.7OPTIONS

OPTIONS方法请求Web服务器告知其支持的各种功能。他可以访问服务器通常支持哪些方法,或者针对某些特定的资源支持哪些特定的操作。

这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就可以判定访问这些资源的最优方式。

HTTP报文的请求体和方法详解_第13张图片


3.3.8DELETE

DELETE方法所做的事情就是请服务器删除请求URL所指定的资源;但是客户端无法确保删除操作一定会被执行。

因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。

HTTP报文的请求体和方法详解_第14张图片

3.3.9扩展方法

HTTP被设计成字段可扩展的,这样新的特性就不会使老的软件失效了。扩展方法指的是没有在HTTP/1.1规范中定义的方法,服务器会为他所管理的资源实现一些HTTP服务,这些方法为开发者提供了一些扩展HTTP服务能力的手段。

HTTP报文的请求体和方法详解_第15张图片


你可能感兴趣的:(HTTP实战)