zoukankan      html  css  js  c++  java
  • http报文

    一、什么是报文

    报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的

    数据信息,其长短很不一致,长度不限且可变。HTTP报文是由一行一行简单的字符串组成的。HTTP报

    文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。如果说HTTP是因特网的信使,

    那么HTTP报文就是它用来搬东西的包裹了。

    二、HTTP报文的执行顺序:

      一次HTTP请求,HTTP报文会从

        “客户端” --------> "代理" ------------> "服务器"。

      在服务器工作完成之后

        "服务器" -----------> "代理"  ---------------->"客户端"

    三、报文的组成部分

    HTTP报文是简单的格式化文本。如下图所示。每条报文都包含一条来自客户端的请求或者一条来自服务器的响应。

    它们由三部分组成:对报文进行描述的起始行、包含属性的首部块以及可选的、包含数据的主体部分。

    所有的HTTP报文都可以分为两类:请求报文和响应报文。请求报文会向Web服务器请求一个动作。响应报文会将请求

    的结果返回给客户端。请求报文和响应报文的基本报文结构相同。

    1、报文的语法

    请求报文的格式:

     
    1. <method> <request-URL> <version>  
    2. <headers>  
    3.   
    4. <entity-body>  


    响应报文的格式

     
    1. <method> <status> <reason-phrase>  
    2. <headers>  
    3.   
    4. <entity-body>  


    下面是对报文格式各部分的解释:

    method(方法)

    客户端希望服务器对资源执行的动作。是一个单独的词,如:GET、HEAD、POST。

    request-URL(请求URL)

    命名了所请求资源,或者URL路径组件的完整URL。

    version(版本)

    报文所使用的HTTP版本,其格式:HTTP/<major>.<minor>

    其中major(主要版本号)和minor(次要版本号)都是整数。

    status(状态码)

    由三位数字组成,描述了请求过程中所发生的情况。

    reason-phrase(原因短语)

    上面数字状态码的可读版本包含行终止序列之前的所有文本。

    headers(首部)

    可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,

    最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始,

    entity-body(实体的主体部分)

    包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。有时,报文只是以一个CRLF结束。

    2、起始行

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

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

    方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行还包含HTTP的版本,用来告

    知服务器,客户端使用的是哪种版本的HTTP。所有的这些字段都由空格符分隔。在HTTP/1.0之前,并不要求请求行中

    包含HTTP版本号。

    响应行。响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,称为响应行,

    包含了响应报文使用的HTTP版本、数字状态码,以及描述状态码的文本信息的原因短语。所有的这些字段都由空格符分隔。

    在HTTP/1.0之前,并不要求响应行中包含HTTP版本号。

    方法。请求的起始行以方法作为开始,方法用来告知服务器要做些什么。

    HTTP规范中定义了一组常用的请求方法。

    注:并不是所有服务器都实现了上面列出的7种方法。而且,由于HTTP设计得易于扩展,所以除了这些方法以外,其他服务器

    可能还会是实现一些自己的请求方法,称为扩展方法。

    状态码。用来告诉客户端,发生了什么事情。

    客户端向一个HTTP服务器发送请求报文时,会发生很多事情。状态码是在每条响应报文的起始行中返回的。

    下面是状态码的分类

    原因短语。是响应起始行中最后一个组件。为状态码提供了文本形式的解释。例:200 OK中,OK就是原因短语。

    版本号。为HTTP应用程序提供了一种将自己所遵循的协议版本告知对方的方式。版本号说明了应用程序支持的最高版本。

    版本好不会被当作小数来处理。版本的每个数字都回被当成一个单独的数字来处理。因此,每个数字都必须单独进行比较,

    以便确定哪个版本更高。比如,HTTP/2.22就比HTTP/2.3的版本更高,因为22比3大。

    3、首部

    首部字段向请求和响应报文中添加一些附加信息。从本质上来说,它们只是一些名/值对的列表。

    首部分类:

    通用首部

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

    请求首部

    提供更多有关请求的信息

    响应首部

    提供更多有关响应的信息

    实体首部

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

    扩展首部

    规范中没有定义的新首部

    常见首部实例:

    4、实体的主体部分

    HTTP报文的负荷。就是HTTP要传输的内容。

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

     
  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/self-hard/p/10473081.html
Copyright © 2011-2022 走看看