一、问题

1、报文流是如何流动的
2、HTTP报文的三个组成部分
3、请求和响应报文之间的区别
4、请求报文支持的各种方法
5、和响应报文一起返回的各种状态码
6、各种各样的HTTP首部都是用来做什么的
 
 

二、报文流

1、什么是HTTP报文
 
HTTP报文是在HTTP应用程序直接发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头。这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理直接流动。
 
常用术语:流入、流出、上游、下游
 
2、报文流入源端服务器
 
HTTP使用术语流入(inbound)流出(outbound)来描述事务处理(transaction)的方向。报文流入源端服务器,工作完成后,会流回用户的Agent代理中。
 
 
 
 
3、报文向下游流动
 
HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有的报文的发送者都在接收者的上游(upstream)。

 
对于请求报文来说,代理1位于代理3的上游;但对于响应报文来说,它就位于代理3的下游。
 

三、报文的组成

HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务端的响应。他们由三个部分组成:对报文进行描述的起始行(start line),包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。
 
 
起始行和首部是由行分隔符的ASCII文本,每行都以一个由两个字符组成的行终止序列作为结束,其中包含一个回车符(ASCII码13)和一个换行符(ASCII码10)。
实体的主体或报文的主体是一个可选的数据块。与起始行和首部不同的是主体可以包含文本或二进制数据,也可以为空。
 

四、报文的语法

所有的HTTP报文都可以分为两类:请求报文(request message)和响应报文(response massage)。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求和响应报文的基本报文机构相同。
 
请求报文的格式
<method> <request-URL> <version>
<headers> <entity-body>

 
响应报文的格式
<version> <status> <reason-phrase>
<headers> <entity-body>

 
 

四、详解

1、起始行
 
所有的HTTP报文都以一个起始行作为开始。请求报文的其实行说明了要做些什么。响应报文的起始行说明了发生什么
 
1)请求行
请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求的URL,这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含了HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。
 
2)响应行
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。
 
2、方法
 
请求的起始行以方法作为开始,方法用来告知服务器需要做些什么。
 
 
 
3、版本号
 
报文所使用的HTTP版本,格式为:
HTTP/<major>.<minor>

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

 
4、状态码(status code)
 
这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。
 
 
 
5、原因短语(reason-phrase)
 
数字状态的可读版本,包含行终止序列之前的所有文本。
 
6、首部(header)
 
可以有零个或多个首部,每个首部都包含有个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部都是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。
 

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

四、交流学习

欢迎大家关注我的公众号,一起交流、学习。

文中的思维导图以及各种总结的表格都可关注公众号:运维汪,发送“1”后下载原图或原文件。
 

图解HTTP权威指南 | HTTP报文的更多相关文章

  1. HTTP权威指南-HTTP报文

    在开始学习本章之前,先来提一些问题,什么是报文?如何创建报文?怎么去理解报文?以及报文的用处有哪些? 什么是报文? 可以这么去理解,如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹 ...

  2. Http权威指南(报文)

    1.报文的组成 报文由 起始行.首部.主体(可选)组成 请求报文: <method> <request-URL> <version> <headers> ...

  3. 图解HTTP权威指南(二)| 连接管理

    一.两个问题 1.HTTP是如何使用TCP连接的 2.HTTP的连接,并行连接.keep-alive(持久连接)和管道化连接   二.TCP连接 1.什么是TCP   TCP/IP是全球计算机及网络设 ...

  4. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  5. 图解HTTP权威指南(四)| 代理

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  6. 图解HTTP权威指南(五) | HTTP缓存

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  7. (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记

    1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...

  8. 【HTTP权威指南】第1 章 HTTP 概述

    1.1 HTTP--因特网的多媒体信使 ................................................................................ ...

  9. HTTP 权威指南 详解 ( 一、概述 )

    HTTP 权威指南 详解 ( 一.概述 ) 最近在解读 <http权威指南> 这本书.之前对于http 的理解仅限于 知道我需要向服务端发送一个 get or post 请求,然后等待服务 ...

随机推荐

  1. 使用Camtasia来消除视频中的声音

    大多数情况下,我们在录制电脑屏幕的时候都会把音频输出也一起录制下来,但也会有时候要后期进行重新配音,需要把事先一同录制的音频消除掉,今天小编来给大家说一说如何消除这种的视频声音. 首先打开Camtas ...

  2. CENTOS 7平滑升级PHP到最新版7.3

    安装Remi和EPEL数据源(仓库) rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm r ...

  3. celery原理与组件

    1.Celery介绍 https://www.cnblogs.com/xiaonq/p/11166235.html#i1 1.1 celery应用举例 Celery 是一个 基于python开发的 分 ...

  4. 浅谈 倍增/ST表

    命题描述 给定一个长度为 \(n\) 的序列,\(m\) 次询问区间最大值 分析 上面的问题肯定可以暴力对吧. 但暴力肯定不是最优对吧,所以我们直接就不考虑了... 于是引入:倍增 首先,倍增是个什么 ...

  5. NOIP2020 游记

    为了防止被禁赛三年,这里说明一下,本篇游记是提前开坑的. 10.9 上午模拟赛,下午初赛改成了全天初赛. 但还是想了会儿题,写了两道水题找找信心吧,毕竟前几天挂分挺严重的. 机房还是挺乱的,甚至连自己 ...

  6. 企业安全03Django GIS SQL注入漏洞CVE-2020-9402

    Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...

  7. 生僻的mysql

    1.show table status like 'user' 2.alter table mytableEngine=InnoDB 需要执行很长时间,mysql会按行将数据从原表复制到一张新的表中, ...

  8. Spring Boot 项目瘦身指南,瘦到不可思议!129M->1.3M

    之前在 从使用传统Web框架到切换到Spring Boot后的总结 中提到关于 Spring Boot 编译打包,Spring Boot 应用程序不用额外部署到外部容器中,可以直接通过 Maven 命 ...

  9. 给你一个亿的keys,Redis如何统计?

    前言 不知你大规模的用过Redis吗?还是仅仅作为缓存的工具了?在Redis中使用最多的就是集合了,举个例子,如下场景: 签到系统中,一天对应一系列的用户签到记录. 电商系统中,一个商品对应一系列的评 ...

  10. Python中判断字符串是否为数字的三个方法isdecimal 、isdigit、isnumeric的差别

    isdecimal .isdigit.isnumeric这三个字符串方法都用于判断字符串是否为数字,为什么用三个方法呢?他们的差别是什么内? isdecimal:是否为十进制数字符,包括Unicode ...