HTTP协议之报文详解
学习WEB开发需要对HTTP协议熟悉,下面直接进入主题。
一、什么是报文
报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
HTTP报文是由一行一行简单的字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了。
二、报文的流动
报文会流入源端服务器,工作完成之后,会流会用户的Agent代理。
HTTP报文会像河水一样流动,不管是请求报文还是响应报文,所有报文都会向下游流动。所有报文的发送者都在接受者的上游。如下图所示,对请求报文来说,代理1位于代理3的上游,但对响应报文来说,它就位于代理3的下游。
三、报文的组成部分
HTTP报文是简单的格式化文本。如下图所示。每条报文都包含一条来自客户端的请求或者一条来自服务器的响应。它们由三部分组成:对报文进行描述的起始行、包含属性的首部块以及可选的、包含数据的主体部分。
所有的HTTP报文都可以分为两类:请求报文和响应报文。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求报文和响应报文的基本报文结构相同。
1、报文的语法
请求报文的格式:
- <method> <request-URL> <version>
- <headers>
- <entity-body>
响应报文的格式
- <method> <status> <reason-phrase>
- <headers>
- <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文档、软件应用程序等。
参考文献:《HTTP权威指南》
HTTP协议之报文详解相关推荐
- STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解
STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...
- TCP协议中报文详解
TCP协议中报文SYN.ACK.FIN.RST.PSH.URG详解 1. SYN:同步连接序号,TCP SYN报文就是把这个标志设置为1,来请求建立连接: 2. ACK:请求/应答状态.0为请求,1为 ...
- OSPF报文详解——LSA概述
目录 一.OSPF报文详解: (1)---OSPF头部分析: (2)---hello字段分析: 二.LSA报文--链路状态通告 (1)---简介: (2)---头部信息: (3)---数据部分: 一. ...
- 虚拟路由器冗余协议VRRP原理详解!
虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...
- HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解
一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...
- bgp 建立邻居发送的报文_bgp邻居建立过程及报文详解.doc
bgp邻居建立过程及报文详解.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 前缀长度和网络号8.当路由失效时,也发送 update ...
- http请求报文和相应报文详解
Http协议的特点 HTTP协议的特点 基于请求/响应模型的协议. 请求和响应必须成对: 先有请求后有响应. 简单快捷 因为发送请求的时候只需要发送请求方式和请求路径即可 HTTP协议默认的端口:80 ...
- UDP和TCP的报文详解
TCP和UDP报文详解 一.先说说端口号 TCP和UDP都是位于传输层的协议,传输层负责将数据从发送端传输到接收端. 端口号(Port)标识了一台主机上正在进行通信的一个具体的应用程序,在TCP/IP ...
- 传输协议之ICMP详解
文章目录 TCP和UDP ICMP 简介 ICMP出现的原因 ICMP的用途 ICMP作为IP的上层协议在工作(报文) ICMP实现之MTU探索 ICMP实现之改变路由 ICMP实现之源点抑制 ICM ...
最新文章
- 计算机音乐情深深雨蒙蒙,情深深雨蒙蒙 MIDI File Download :: MidiShow
- 用户密码登录改造实现
- 视觉SLAM笔记(15) 李群与李代数
- php获取pid,在Shell脚本中获取指定进程的PID
- mysql 处理文件函数_mysql的字符串处理函数
- [译] 第二天:AngularJS - 认识AngularJS
- Introduction to the 80386
- 关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章2
- win7系统gpt分区激活工具哪个好?
- qqkey获取原理_HIT我守护的一切手游电脑版苹果版有吗 HIT我守护的一切iOS电脑版模拟器...
- World Wind Java 系列
- matlab 非均匀采样,非均匀采样信号的频谱分析
- 北大元培学院数学与计算机,通识教育试验的尴尬 北京大学元培学院近距离观察...
- INTERCEPTOR DISCONNECTED 的问题
- Facebook批量养号分享
- 国产自研芯片取得的进展,连外媒都认可了,ARM真怕了
- 马宁伟-20年工作经验谈-4-男怕入错行
- 如何精确设计压铸模具的溢流槽和排气槽?| 智铸超云干货分享
- 什么是证券投资基金?
- 阅读文献Evaluation of dynamic route planning impact on vehicular communications with SUMO