HTTP报文是什么

2,082 阅读6分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

pexels-monoar-rahman-109371.jpg

📢📢如果说http是因特网的信使,那么http报文就是他用来送信的包裹了

(1)📚什么是报文

在度娘的介绍中

📣报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。  

也就是说http报文是在http应用程序之间发送的数据块,,它包裹着我们进行请求数据交换的信息✔。

(2)📚报文的组成部分

📃2.1 报文基本结构

http报文是简单的格式化数据块,它有三个部分组成。对报文进行描述的起始行(start line)、包含属性的首部(header)、以及可选的包含数据的主体(body)部分,主体部分可以包含文本或二进制数据也可以为空。

举个栗子🌰,如图所示,这里列举了一个服务端响应的报文 image.png

📊在这张图中,首部给出了一些与主体信息有关的信息。Content-Type行说明了主体是纯文本文档text/plainContent-Length行说明了当前主体的大小16个字节。

📃2.2 报文的分类

所有的HTTP报文都可以分为两类,请求报文(request message)响应报文(response message)。请求报文由客户端向服务器发出,响应报文由服务器响应客户端返回响应结果。虽然有区别,但是两种报文的结构是相同的,都是由起始行、首部、主体三部分组成。

📒请求报文的格式

<method> <request-URL> <versin>
<header>
<entity-body>

📒响应报文的格式(只有起始行是不同的)

<versin> <status> <reason-phrase>
<header>
<entity-body>
  • 请求方法(method)
    客户端对服务端发起请求的方式,比如get、post、put等
  • 请求URL(request-URL)
    请求服务器资源的url路径
  • 版本(versin)
    报文所使用的http的版本
  • 状态码(status-code)
    这三位数字描述了请求过程中所发生的情况。
  • 原因短语(reason-phrase)
    数字状态码的可读版本,比如上面例子中的OK
  • 首部(header)
    可以有零个或者多个首部,每个首部都包含一个名字。
  • 实体的主体部分(entity-body)
    包含一个由任意数据组成的数据块

image.png

(3)📚请求报文支持的各种方法

请求的起始行以方法作为开始,方法使用来告知服务器要做些什么。但值得注意的是并不是每个服务器都实现了所有方法,这些限制通常都是在服务器的配置中进行设置的,因此会随着站点和服务器的不同而有所不同。

image.png 此图来自菜鸟驿站

📃3.1 GET请求

主要用于向指定的URL(URI)请求资源(资源文件或是数据均可), 可以带参数也可以不带参数, 带参数时,参数是明文传递,你可以在浏览器的地址栏中看到参数名及参数值,get安全性不高,所以常用于安全性要求低的场合, 比如登录后请求数据。

📃3.2 HEAD请求

HEAD 请求和 GET请求很类似,都是从服务器获取资源,但是服务器在响应中并不会返回主体,只返回首部。服务器开发者必须确保返回的首部和GET请求返回的首部是完全相同的

HEAD请求常常被忽略,但是能提供很多有用的信息,特别是在有限的速度和带宽下,使用HEAD请求,可以:

1、只请求资源的首部;

2、检查超链接的有效性、以及最近是否更新;

3、通过查看首部,检查网页是否被修改;

4、多用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等

📃3.3 POST请求

在Http请求里post是其中比较常用的提交数据的请求方式, POST方法起初是用来向服务器输入数据的。实际上,我们通常会用它来提交form表单。

📃3.4 PUT请求

PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

📃3.5 DELETE请求

DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

📃3.6 CONNECT请求

connect在网页开发中不会使用到, connect的作用就是将服务器作为代理,让服务器代替用户去访问其他网页(说白了,就是翻墙),之后将数据返回给用户。

📃3.7 OPTIONS请求

OPTIONS请求web服务器告知其支持的各种功能。可以询问服务器支持哪些方法,或者对某些特殊资源支持哪些方法,这就为客户端提供了一种手段,使其不用访问那些资源就可以知道访问这种资源最优的方式,仅作查询使用。 简而言之,OPTIONS请求方法的主要用途有两个:

  1. 获取服务器支持的HTTP请求方法;

  2. 用来检查服务器的性能。

🙄其实在实际开发中我们可能经常有见到OPTIONS请求,因为在某些情况下,普通的get或者post请求回首先自动发起一次options请求,当options请求成功返回后,真正的ajax请求才会再次发起。 那么是哪些情况会发起OPTIONS请求呢?

  1. 跨域请求,非跨域请求不会出现options请求
  2. 自定义请求头
  3. 请求头中的content-type是application/x-www-form-urlencoded,multipart/form-data,text/plain之外的格式

📃3.8 TRACE请求

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

TRACE方法主要用来诊断,当然他也有缺点, TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此,可用来进行跨站脚本(XSS)攻击,这种攻击方式又称为跨站跟踪攻击(XST)。

📃3.9 PATCH请求

HTTP中为了提高交互操作性与防止错误,确实需要一种新的修改方法,而PUT方法已经被定义为用一个请求体去修改一个完整的资源。并且不能重复做部分更改,否则代理和缓存、甚至服务器或者客户端都会得到有问题的操作结果。

至此,PATCH方法有了被完全定义的必要。

PATCH在请求中定义了一个描述修改的实体集合,如果被请求修改的资源不存在,服务器可能会创建一个新的资源。