HTTP报文

谁借莪1个温暖的怀抱¢ 2022-02-20 16:48 436阅读 0赞

报文简述


  • 什么是报文
    报文是HTTP中客户端和服务端之间互相传递的信息,类似于我们人类的“话”,“信”。
  • 流向
    在HTTP中,一个报文的传输是只有一个方向的,客户端发送出去的报文是不能再回到客户端。并且HTTP中的服务端是不会主动发出报文的,如果有这个需求可以看websocket或者HTTP 的 SSE。
  • 组成
    HTTP的报文包含起始行,首部以及可有可无的主体。
    在这里插入图片描述
    HTTP的规范中是要求每一行的结束都要用CRLF。首部的最后要是一个空行,用于标识首部结束主体的开始。

报文的语法

  • 请求报文和响应报文
    报文分两种请求报文和响应报文。请求报文用于描述客户端想干什么,而响应报文用于描述结果。举个栗子:A对B说:给我倒杯水。(这就是请求报文)B对A说:你要脸不。(这就是响应报文)
    请求报文的格式:
    在这里插入图片描述
    响应报文:
    在这里插入图片描述
  • 举个栗子:
    请求报文:
    在这里插入图片描述
    响应报文:
    在这里插入图片描述

起始行


  • 方法
    方法用于描述请求的性质,是获取什么,还是删除什么等等。其中获取某些东西的方法被称为安全方法,这些方法目前有(GET和HEAD)。其实这些方法的具体功能还是要看WEB程序员怎么实现,如果你就想用GET方法表示删除,那也是能实现的。
    GET方法通常用于获取某些资源,类似于数据库中的DQL。
    HEAD这个方法也是获取某些信息。他和GET不同的是他只返回首部,而不是实际的资源。所以HEAD一般用于:了解资源的概况(属于哪个种类等),查看资源是否存在以及资源是不是被修改了。如果你用过NGINX或者TENGING,你会发现官网中健康检查的建议使用HEAD。
    PUT用于向服务端上传资源,类似数据库中的DDL。
    POST用于向服务端输入数据,类似于数据库中的DML。我个人分辨PUT和POST,举个栗子:PUT用来把文件上传到服务器上,而POST用于对文件内容进行更改或者插入或者删除。
    TRACE这个方法不太常用,比如我们的实际的生产环境中客户端和服务端中可能用很多中转站,这些中转站会修改我们的报文,如果你想在客户端知道你的报文最终改成什么样了,那就可以用这个方法。
    OPTIONS这个方法用于请求服务端告诉客户端支持的功能,类似于咨询的意思。如果你用过跨站请求的话,你会发现在请求前,浏览器会用OPTIONS问一下服务端自己有没有权限访问。
    DELETE这个不多说了就是删除资源。
    扩展方法HTTP允许我们定义方法。WebDAV HTTP就定义了LOCK,COPY等扩展方法。
  • 状态码
    状态码是服务端用于简单描述结果,基本上分为五大类。
    100 - 199 这些是比较新的状态码。其中100101是已经定义好的,100(Continue)用于发送一个服务端无法接受的大文件,客户端会在请求头中带一个100 continue的首部,服务器接收到以后会返回一个100 continue的响应,这样就可以把一个大请求分隔成几个小请求了。101 Switching Protocols, 用于描述把客户端的请求的协议转化为Update首部指出的协议。
    200 - 299 这个是大家比较常见的,用于描述请求成功了。

























状态码 原因短语 描述
200 OK 请求成功
201 CREATED 资源创建成功
202 ACCEPTED 请求已经接受,但是还没有完成相应的动作

等等还有203 204 205 206大家可以自行百度了
300-399这些是重定向状态码。举个栗子说明什么是重定向:A对B说:把你的钱都给我。B对A说:我不傻,C傻,C会给你。A就去找C了。
有的时候这类状态码也用在验证资源是否更新,比如你本地有个资源副本,你可以发送请求,这个请求中带有资源的描述信息,服务端收到请求后发现资源没有修改,他就回复一个304 NOT Modified,客户端就继续使用本地的副本。




































状态码 原因短语 描述
300 Multiple Choices 客户端可能请求的资源包含了多个版本,这样服务端就会回复一个列表让客户端选择
301 Moved Permanently 永久重定向
302 Found 临时重定向
303 See Other HTTP1.1版本的重定向
307 Temporary Redirect HTTP1.1版本的临时重定向

400 - 499 客户端错误状态码,比如我们最不喜欢的404就是这类状态码。这类状态码很多,我就不列举了。
500-599服务器错误状态码,用于说明错误是由于服务端的错误引起的。比如500 Internal Server Error。实在不想列举了,写累了,大家自行百度吧。

  • 首部
    首部可以说是报文的标签,通过这些标签你就可以快速了解这个报文的属性。比如Content-type: text/plain,你就知道这个报文的实体部分是普通的文本。
    大体分为五种类型:
    通用首部 这些既可以用在请求中也可以用在返回中使用,比如Date首部就是一个通用的首部用于说明报文发起的时间。
    请求首部只能用在请求中,比如Accept首部,用于说明期望服务端返回指定类型的数据
    响应首部只能用在响应中,比如Server首部,用于说明服务端的用什么来服务的,nginx或者Django等
    实体首部用于描述实体的属性,比如Content-type
    扩展首部也就是自定义的首部了。

先写到这里了,有问题进QQ群630300475聊一聊,大家一起进步

发表评论

表情:
评论列表 (有 0 条评论,436人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HTTP

    一、什么是报文: 用于HTTP协议交互的信息称为HTTP报文,请求端的报文叫请求报文,响应端的报文叫响应报文。 二、报文的分类: 报文首部和报文主体; 三、报文的内容:

    相关 HTTP

    HTTP报文是在HTTP应用程序之间发送的数据块。 HTTP报文是简单的格式化数据块。分为请求报文和响应报文。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。

    相关 HTTP

    报文流 > 如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了 HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(

    相关 HTTP

    HTTP 报文 前言: HTTP报文是因特网传播数据不可缺少的重要部分, 可以这样去理解: 如果说HTTP是因特网的信使, 那么HTTP报文就是这位信使用来搬

    相关 http请求和响应

    http请求报文和响应报文 前言 http协议是一个应用层协议,其报文分为请求报文和响应报文; 当客户端请求一个网页时,会先通过http协议将请求的内容封装在h