吃透HTTP权威指南 第三章 HTTP报文

**定个小目标,吃透这本书,每天最少一章 CSDN 见**
  1. 报文流
    HTTP报文,用来“包裹”HTTP数据的箱子,
    HTTP报文是在HTTP应用之间发送的数据块,是一些以文本形式的数据,描述了传输数据的内容,这些数据在客户端服务器和代理之间流动,简称为报文流。
    HTTP用术语流入和流出来描述事务处理的方向,客户端到服务器为流入,服务器到客户端到流出。报文会像水一样向下流动。
    客户端—>代理—>服务器—>代理—>客户端
  2. 报文的组成形式
    HTTP报文是一个简单的数据块,每条报文都包含一条来自客户端的求情,或者服务器的响应。HTTP报文包含3个部分,对报文描述的起始行(start line),包含属性的首部块(header),以及可选的包含 数据的主体
    起始行和首部都是由行分割的ASCII的文本,每行都以一个由两个字符组成的行终止序列作为结束(“\r\n\r\n”)。这个行终止序列可以写成CRLF。也有一些使用单个换行符(\n)来表示终止。HTTP的主体是和起始行和首部不同,它是一个可选的数据库(可以没有),它可以是二进制数据。首部需要给出主体的格式信息,Content-type: text/plain 行就说明了主体的格式为text,Content-length:19行表示主体的长度。
    HTTP的所有报文都可以分为两类,请求报文,响应报文,请求报文会向WEB服务器请求一个动作,响应报文会将请求的结果返回给客户端。请求报文和响应报文的基本报文结构相同。
    请求报文的格式:

     <method> <request-URL> <version> <headers><entity-body>
    

    响应报文的格式,只是起始行语法不同

    <version> <status> <reason-phrase>
    <headers><entity-body>
    


    上面短语的注释,
    method,HTTP的请求方法往往是一个单独的GET,HEAD,POST…)。 request-URL,上一章有说过。version,HTTP的版本。
    status,返回的状态码(执行的结果,成功或者失败等)。
    reason-phrase,返回的原因短语。header 首部,可以有多个或者0个首部,没个首部都包含了一个名字,后面用“:”分割其值,有一个空行表示结束。
    entity-body,实体部分,可以是任何数据,也可以没有实体
    注意:一个HTTP首部应该总是由一个空行结束

  3. 方法
    所有的请求报文都是由一个起始行的,也叫做求情行,包含了一个方法和一个求情URL,用来告知服务器客户端要对那个资源执行什么方法,还由一个HTTP版本,HTTP并没有要求所有的起始行必须包含HTTP版本。
    响应行包含了报文使用的HTTP版本,返回的数字状态码,以及用来描述操作状态的文件形式短语
    请求的起始行以方法作为开始,方法用来告知服务器要做些说明,比如:"GET /test/aaa.gif HTTP/1.0"中,方法就是GET。
    HTTP规范总定义了一组常用的请求方法:

    方法            描述                          是否包含主体
    GET         从服务器获取一份文档                          否
    HEAD        中从服务器获取文档的首部                        否
    POST        向服务器发送需要处理的数据                   是
    PUT     将求情的主体不放呢存储到服务器上                    是
    TRACE   对可能经过代理服务器传送到服务器的报文进行追踪     否
    OPTIONS 决定可以在服务器上执行那些方法                     否
    DELETE  从服务器上删除一份文档                         否
    

    不是所有服务器都实现了上面的所有方法,HTTP设计得易于扩展,所以有些服务器可能实现了一些其他的方法
    状态码是用来告诉客户端执行的结果或者发送了上面事情。比如 HTTP/1.0 200 OK 状态码就是200.
    状态码的分别一般为
    整体范围 以定义 分类
    100-199 100·101 信息提示
    200-299 200-206 表示成功
    300-399 300-305 重定向
    400-499 400-415 客户端错误
    500-599 500-505 服务器出错
    HTTP/1.0 200 OK 中OK为返回的短语,HTTP中对短语没有硬性要求。
    HTTP版本号是为了以便了解对方的能力个HTTP报文的格式,主要版本号的比较不能用小数形式来进行比较,应该是两个单独的数据进行比较,就是HTTP/2.22就比HTTP/2.3大,因为22比3大。
    HTTP起始行后面跟的就是HTTP首部了,HTTP首部是由一个或多个行组成的。HTTP规范定义了几种首部字段。应用程序也可以随意发明自己所用的首部。HTTP首部可以分为以下几类
    通用首部:既可以出现在求情报文中,也可以出现在响应报文中
    求情首部:提供更多有关请求的信息
    响应首部:提供更多有关响应的信息
    实体首部:描述实体的长度和内容或者资源自身的信息
    扩展首部:规范中没有定义的新首部
    每个HTTP首部都有一种简单的语法 “选项: 值” :后面的空格为可选的 最后以CRLF结尾
    HTTP首部行可以分为多个行来提高可读性,多出来的行前面只是要由一个空格或制表符(tab)
    例如:

    HTTP/1.0 200 OK
    Content-Type: image/gif
    Content-Length" 8672
    Server: Test ServerVersion 1.0```这个部分中Server中就是被分为多行表示的HTTP的主体部分为HTTP的实体,就是HTTP要传输的内容,其中可以包含任意格式的内容HTTP的方法会根据HTTP服务器对方法实现的不同而执行不同的操作,比如,DELETE方法,服务器的实现可能并不是删除,而是资源移动到某个位置。HTTP定义了一组被称为安全方法的方法,这些方法都不会对服务器产生任何动作(有点像只读)。安全方法并不一定是什么动作都不执行的,是用安全方法的目的就是运行HTTP应用程序开发者通过告知用户这个操作可能引发某些不安全的方法。比如线上支付,很多浏览器都会对其进行提示。GET:基本上所有服务器都实现了该方法,HTTP/1.1要求服务器实现了此方法。通常用于从服务器获取某个资源HEAD:和GET方法很类似,但是HEAD方法只返回首部,该首部应该和GET方法获取的首部完全一样。PUT:与GET方法想法,该方法是将用户数据发送到服务器上去,因此大多服务器允许用户将数据写入到服务器,但大多都需要用户输入密码登录。POST:起初是用来向服务器输入数据的,实际上通常会用它来支持HTML的表单,用户将表单填好,然后发送给服务器。TRACE:记录了从客户端到服务器的路径,中间转发的服务器。OPTIONS:用来查询服务器支持的各种功能DELETE:用来删除资源文件的,但是HTTP服务器不一定会执行,HTTP规范运行服务器在不通知客户端的情况下撤销求情。扩展方法:HTTP允许用户自定义扩展方法,其中由一些通用的扩展方法,LOCK(允许用户锁定资源文件)MKCOL(允许用户创建支援)COPY(便于在服务器上负责资源)MOVE(在服务器上移动资源)并不是所有方法都是规范的,最好对这些扩展方法宽容一些。
    
  4. 状态码
    HTTP的状态码被分为五大类
    100-199 信息性状态码 以定义的
    200-199 成功状态码 以定义的

    300-399 重定向状态码 以定义的


    400-499 客户端错误状态码 以定以的

    500-599 服务器错误状态码 以定义的

    以上是状态码的表示
  5. 首部
    通用首部:表示客户端和服务器和其他应用程序之间提供的通用功能,比他Date首部就是一个通用首部,每一端都可以用它来说明构建报文的时间


    求情首部:请求报文特有的,它为服务器提供了一些额外的信息,比如客户端希望接受说明类型的数据




响应首部:响应报文特有的,以便为客户端提供信息



实体首部:实体首部指的是拥有应对实体主体部分的首部,就是文件的类型,长度


扩展首部:由应用程序开发者创建的,还未添加到已批准的HTTP规范中

《HTTP权威指南》第三章学习总结相关推荐

  1. 《果壳中的C# C# 5.0 权威指南》 (09-26章) - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...

  2. 《果壳中的C# C# 5.0 权威指南》 (01-08章) - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ========== [作者] (美) Joseph Albahari (美) Ben Albahar ...

  3. 《HTTP权威指南》第一章学习总结

    吃透HTTP权威指南 第一章 定个小目标,吃透这本书,每天最少一章 CSDN 见 HTTP 因特网的多媒体信使 这一小节没啥好说的···一些基本的介绍 Web客户端和服务器 Web服务器一般被称为HT ...

  4. Asterisk权威指南/第三章 安装Asterisk

    在这一章我们将详细介绍如何从源代码安装Asterisk.很多人回避这种方法,说它太难了,又耗时间.我们在这里想证明的是从源代码安装Asterisk其实没那么难.更重要的是,我们想为你提供一个最好的As ...

  5. CUDA C编程权威指南 第三章 CUDA执行模型

    基础 每个GPU有多个SM(streaming multiprocessor) 当启动一个grid时,它的block会被分配给多个SM上执行,一个block一旦被调度到一个SM上,则这个block只会 ...

  6. HTML5 权威指南第 10 章 文档分节 学习笔记

    HTML5 权威指南第 10 章 文档分节 学习笔记 第 8 章 标记文字 内容从从文字出发,专注如何将单体内容正确的呈现出来:第 9 章 组织内容 内容从段落出发,专注如何将单体内容合理的放在段落中 ...

  7. JavaScript权威指南 第15章 网络编程 第三部分

    JavaScript权威指南 第15章 网络编程 第三部分 可伸缩矢量图形 15.7.1 在HTML中使用SVG 15.7.2 编程操作SVG 15.7.3 通过JavaScript创建SVG图片 1 ...

  8. 《Hadoop权威指南》第二章 关于MapReduce

    <Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...

  9. Python精确指南——第三章 Selenium和爬虫

    3       Selenium 3.1     介绍 网络爬虫在互联网领域有着广泛的应用. Selenium是一个页面自动化控制框架.能够模拟实际操作,自动化获取网站提供的页面资源信息. Selen ...

最新文章

  1. 百一测评mysql数据库答案_MySQL练习题,百炼成神~
  2. SIGIR 2020 | 第四范式提出深度稀疏网络模型,显著提升高维稀疏表数据分类效果...
  3. Multi-thread--C++11中std::condition_variable的使用
  4. 千万别让海底捞知道你的生日
  5. 95-130-022-源码-source-基于socket的source源码分析SocketTextStreamFunction
  6. 哨兵2号波段_分布式框架之高性能:Redis哨兵模式
  7. Linux下高速缓存DNS的配置
  8. sklearn模型保存
  9. ajax在php中使用方法,在项目中如何使用ajax请求
  10. abd.exe 需要下java吗_abd.exe
  11. ColorUI从0开始搭建项目
  12. Java 案例七 超市管理系统(商品清单,商品添加,商品删除,修改库存)
  13. Footprint:如何寻找有增长潜力的NFT项目?
  14. 脊髓炎起病急 该做好哪些治疗呢?
  15. 解决IIS 6.0的200KB与下载4MB的限制
  16. 音频剪辑合成 php,教你如何剪辑多个视频合并成一个 视频剪辑合并软件
  17. 【AtCoder】AtCoder Grand Contest 045
  18. 云服务器怎么设置虚拟IP,云服务器能起虚拟ip吗
  19. 忽如一夜春风来,千树万树梨花开
  20. python找最小值_Python,lambda,找到最小值

热门文章

  1. 在Padavan上Open*** Server服务端遇到的几个调测问题
  2. Python之初级RPG小游戏
  3. goahead Web Server 环境搭建
  4. open-falcon监控实施
  5. 干货丨excel单元格如何添加下拉选项?
  6. 正点原子linux串口驱动下载,【正点原子Linux连载】第二十一章UART串口通信实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南 (amobbs.com 阿莫电子论坛)...
  7. 华为快应用_IDE:如何使用真机预览
  8. 2021年制冷与空调设备运行操作模拟试题及制冷与空调设备运行操作模拟考试
  9. 春天,是时候______
  10. 解答:C语言中结构体的定义中,后面跟的“结构体变量”到底是什么?