HTTP报文

HTTP报文引发地思考:

  • 报文是如何流动的;
  • HTTP报文的三个组成部分;(起始行、首部、实体的主体部分)
  • 请求和响应报文的区别;
  • 请求报文支持的各种方法;
  • 和响应报文一起返回的状态码;
  • 各种各样的HTTP首部都是用来做什么的;

 

报文

  1. 报文流是HTTP应用程序之间发送的数据块。这些数据块是以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分;
  2. 报文流向是报文流动的方向。不管是请求报文或响应报文,报文都会从上游服务器向下游服务器流动,即数据从源端服务器向目标服务器发送;

报文组成

简述

客户端请求和服务器响应都会生成一条报文。报文是由用于对报文进行描述的起始行,包含属性的首部及可选的实体数据等模块构成;

语法(组成格式):

请求报文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
 
响应报文的格式(注意,只有起始行的语法有所不同):
<version> <status> <reason-phrase>
<headers>
<entity-body>

请求报文 

  1. 方法<method>:请求报文时方法用于告知服务器执行的操作,让服务器根据客户端请求报文做出对应的处理,即服务器对资源执行的动作;
  2. 请求资源<request-URL>:请求URL,即请求资源路径,用于告诉服务器对哪个资源路径执行相应的请求动作;
  3. 版本<version>:当前请求客户端所使用的HTTP版本,使服务器知道当前版本所能支持执行的方法特性;
  4. 首部<headers>:首部中包含了请求中所添加的属性,例如接收文本类型,发起请求名称等;
  5. 请求体<entity-body>:请求服务器时传输的数据实体,请求体是可选传参的,可以不传,也可以传字典或字符串等数据;

响应报文

  1. 版本<version>:当前响应服务器所使用的HTTP版本,用于通知客户端当前服务器HTTP版本;
  2. 状态码<status>:通过三位数字来通知请求过程中发生的情况,一般第一位数字用来判断当前响应结果;
  3. 原因短语<reason-phrase>:数字状态码的可读版本,状态码所对应的原因描述;
  4. 首部<headers>:响应报文有自己的首部集,以便为客户端提供信息;
  5. 响应实体<entity-body>:根据用户请求所返回的响应数据;

起始行

  • 请求行:请求报文请求服务器对资源执行一些操作,请求报文的起始行我们称为请求行。请求行包含一个方法,请求资源路径URL和HTTP版本,方法描述了服务器执行资源的操作,请求资源URL是对某个资源路径执行这个操作方法,HTTP版本则是客户端所使用的HTTP版本号;
  • 响应行:响应行说明了服务器对请求报文执行后的响应。响应行包含了服务器HTTP版本,响应状态码及原因短语;
  • 方法:
方法功能是否包含实体数据
GET从服务器上获取资源文档
HEAD只获取服务器资源文档首部
POST向服务器发送需要处理的数据
PUT将请求的主体部分存放在服务器上
TRACE对经过的代理服务器传送服务器上的报文进行追踪
OPTIONS决定可以在服务器上执行哪些方法
DELETE从服务器上删除数据

 

  1. GET:用于请求服务器发送资源数据。
  2. HEAD:在不需要获取资源主体的情况下,获取服务器的响应首部,便于获取了解资源的类型(格式等)、验证资源是否存在或者被修改过;
  3. POST:客户端向服务器发送实体数据;
  4. PUT:将客户端数据上传到服务器,并存储在服务器中;
  5. DELETE:将用户指定服务器上的数据删除,但这里的删除可能会涉及到服务器上权限问题,有时候删除成功,并不代表服务器上资源已经不存在了;
  • 常见状态码
整体范围使用范围分类
100-199100-101信息提示
200-299200-206成功响应
300-399300-305资源重定向
400-499400-415客户端出错
500-599500-505服务器出错
  1. 101:客户端的请求初始化数据服务器收到并响应,客户端可继续发生数据;
  2. 200:请求成功响应,返回客户端请求的资源数据;
  3. 300:客户端请求的URL指向多个资源;
  4. 301:请求的URL资源不存在了;
  5. 400:客户端发送数据出错;
  6. 500:服务器处理请求报文失败;

首部

  • 通用首部:在服务器、客户端及其他应用程序都可使用的通用首部,例如:Date:Tue,3 Oct 1993;
  • 通用缓冲首部:HTTP应用程序对数据进行本地缓冲,这样就不需要每次都请求源服务器获取数据; 
  • 请求首部:请求报文中的请求首部,为请求的服务器提供了额外的信息,提供了客户端希望接收到的数据类型或编码字符格式等;
  • 响应首部:响应报文也提供了相应的响应首部集,将响应首部信息更好地通知客户端,有助于客户端处理响应,便于客户端以后发送更好地请求;
  • 实体首部:报文中用于应对实体主体的首部,主要用于对实体数据类型进行说明;
  • 扩展首部:扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP 规范中去。即使不知道这些扩展首部的含义,HTTP 程序也要接受它们并对其进行转发;

​​​​​​​常见首部实例

首部实例描述

Date:Tue,3Oct 1997 02:16:03 GMT

服务器产生响应的日期

Content-length:15040

实体的主体部分包含了15 040 字节的数据

Content-type:image/gif

实体的主体部分是一个GIF 图片

Accept: image/gif, image/jpeg, text/html

客户端可以接收GIF 图片和JPEG 图片以及HTML

 

 

 

 

 

 

请求Accept首部

                          首部

                              描述

Accept

 告诉服务器能够发送哪些媒体类型

Accept-Charset

 告诉服务器能够发送哪些字符集

Accept-Encoding

告诉服务器能够发送哪些编码方式

Accept-Language

告诉服务器能够发送哪些语言

TE11

告诉服务器可以使用哪些扩展传输编码

 

 

 

 

 

 

 

安全请求首部

                首部

                                                描述

Authorization

包含了客户端提供给服务器,以便对其自身进行认证的数据

Cookie

客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能14

Cookie2

用来说明请求端支持的cookie 版本,参见11.6.7 节

 

 

 

 

 

内容首部

                           首部

                                   描述

Content-Encoding

 对主体执行的任意编码方式

Content-Length

主体的长度或尺寸

Content-Type

 这个主体的对象类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值