[HTTP] HTTP消息
HTTP消息是什么
HTTP消息是什么
HTTP报文,又称为HTTP消息,是服务器和客户端之间交换数据的模块。有两种类型的消息:请求,由客户端发送用来触发一个 服务器上的动作;响应,来自服务器的应答。
HTTP消息由采用ASCL编码的多行文本构成。在HTTP/1.1及早期版本中,这些消息通过连接公开地发送。在HTTP/2中,为了优化和性能方面的改进,曾经可人工阅读的消息被分到多个HTTP帧中。
HTTP消息结构
HTTP请求消息和响应消息具有相似的结构,由以下部分组成:
- start line: -行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
- HTTP headers:一个可选的HTTP头集合指明请求或描述消息正文。
- empty line:-个 空行指示所有关于请求的元数据已经发送完毕。
- body:一个可选的包含请求相关数据的正文(比如HTML表单内容),或者响应相关的文档。正文的大小有起始行的HTTP头来指定。
起始行和HTTP消息中的HT TP头统称为“请求头”,而其有效负载被称为“消息正文”。
请求消息与响应消息
HTTP请求消息:由客户端发送用来触发一个 服务器上的动作。
HTTP响应消息:来自服务器的应答。
请求消息
起始行
起始行(start-line)包含三个元素:
请求方法:描述要执行的动作。例如GET表示要获取资源,POST表示向服务器推送数据。
请求地址: 通常是一个URL,或者是协议、端口和域名的绝对路径。
HTTP版本:定义了剩余报文的结构,作为对期望的响应版本的指示符。
GET /home.html HTTP/1.1
请求方法
HTTP协议定义了一组请求方法,以表明要对给定资源执行的操作,指示针对给定资源要执行的期望
动作。
请求方法 | 描述 |
---|---|
GET | GET方法请求一个指定资源的表示形式。使用GE T的请求应该只被用于获取数据 |
HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体 |
POST | POST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改 |
PUT | PUT方法用请求有效载荷替换目标资源的所有当前表示 |
DELETE | DELETE方法删除指定的资源 |
CONNECT | CONNECT方法建立一个到由目标资源标识的服务器的隧道 |
OPTIONS | OPTIONS方法用于描述目标资源的通信选项 |
TRACE | TRACE方法沿着到目标资源的路径执行一个消息环回测试 |
PATCH | PATCH方法用于对资源应用部分修改 |
请求头
请求头允许客户端向服务器端传递附加信息。请求头由名称(不区分大小写)后跟一个冒号“.",冒号后跟具体的值(不带换行符)组成。
根据不同上下文,可将请求头分为:
通用头: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
请求头:包含更多有关要获取的资源或客户端本身信息的消息头。
实体头: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。
请求主体
请求消息的最后一部分 是请求主体。
不是所有的请求都需要请求主体:例如获取资源的请求GET、HEAD、DELETE和OPTIONS,通常它们不需要请求主体。
有些请求将数据发送到服务器以便更新数据:常见的的情况是PCST请求(包含HTML表单数据)。
请求主体大致可分为两类:
单一资源主体:由一个单文件组成。该类型请求主体由两个header定义:
Content-Type
Content-Length。多资源主体: 由多部分请求主体组成,每一部分包含不同的信息位。通常是和HTML表单连系在一起。
响应消息
状态行
HTTP响应消息的起始行被称作状态行(status line),包含以下信息:
协议版本:通常为HTTP/1.1。
状态码: 表明请求是成功或失败。常见的状态码是200,404,或302。
状态文本: 一个简短的,纯粹的信息,通过状态码的文本描述,帮助人理解该HTTP消息。
HTTP/1.1 200 OK
响应头
响应头允许服务器端向客户端传递附加信息。响应头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。
根据不同上下文,可将响应头分为:
- 通用头: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
- 响应头: 包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。
- 实体头: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。
响应主体
响应消息的最后一部分是响应主体。不是所有的响应都需要响应主体:例如具有状态码(如201或204)的响应,通常不会有响应主体。
响应主体大致可分为两类:
- 单一资源主体:由已知长度的单个文件组成。该类型响应主体由两个header定义: Content-Type和Content-Length
- 单一资源主体:由未知长度的单个文件组成,通过将Transfer- Encoding设置为chunked来使用chunks编码。
- 多资源主体:由多部分响应主体组成,每部分包含不同的信息段。但这是比较少见的。
状态码
信息响应
状态码 | 描述 |
---|---|
100 Continue | 这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它 |
101 Switching Protocol | 该代码是响应客户端的Upgrade标头发送的,井且指示服务器也正在切换的协议 |
102 Processing | 此代码表示服务器已收到并正在处理该请求,但没有响应可用 |
成功响应
状态码 | 描述 |
---|---|
200 OK | 请求成功 |
201 Created | 该请求已成功,并因此创建了一个 新的资源。这通常是在PUT请求之后发送的响应 |
202 Accepted | 请求已经接收到,但还未响应,没有结果 |
203 Non-Authoritative Information | 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝 |
204 No Content | 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息 |
205 Reset Content | 服务器成功处理了请求,且没有返回任何内容。该响应主要是被用于接受用户输入后,立即重置表单 |
206 Partial Content | 服务器已经成功处理了部分GET请求 |
重定向
状态码 | 描述 |
---|---|
300 Multiple Choice | 被请求的资源有一系列可供选择的回馈信息 |
301 Moved Permanently | 被请求的资源已永久移动到新位置 |
302 Found | 请求的资源现在临时从不同的URI响应请求 |
303 See Other | 对应当前请求的响应可以在另一个URI上被找到,而且客户端应当采用GET的方式访问那个资源 |
304 Not Modified | 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变 |
客户端响应
状态码 | 描述 |
---|---|
400 Bad Request | 语义有误,当前请求无法被服务器理解 |
401 Unau sthorized | 当前请求需要用户验证 |
403 Forbidden | 服务器已经理解请求,但是拒绝执行它 |
404 Not Found | 请求失败,请求所希望得到的资源未被在服务器上发现 |
405 Method Not Allowed | 请求行中指定的请求方法不能被用于请求相应的资源 |
服务端响应
状态码 | 描述 |
---|---|
500 Internal Server Error | 服务器遇到了不知道如何处理的情况 |
501 Not Implemented | 此请求方法不被服务器支持且无法被处理 |
502 Bad Gateway | 此错误响应表明服务器作为网关需要得到一个处理这个请求的响应 |
503 Service Unavailable | 服务器没有准备好处理请求 |
504 Gateway Timeout | 当服务器作为网关,不能及时得到响应时返回此错误代码 |
505 HTTP Version Not Supported | 服务器不支持请求中所使用的HTTP协议版本 |
MIME类型
MIME类型
MIIME类型全称为Multipurpose Internet Mail Extensions,被译为多用途Internet邮件扩展类型,是一种标准化的方式来表示文档的性质和格式。
浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器设置正确以将正确的MIME类型附加到响应对象的头部是非常重要的。
类型 | 描述 | 经典示例 |
---|---|---|
text | 表明文件是普通文本 | text/plain, text/html, text/css, text/javascript |
image | 表明是某种图像 | image/gif, image/png, image/jpeg, image/bmp, image/webp |
audio | 表明是某种音频文件 | audio/mid, audio/mpeg, audio/webm, audio/ogg, audio/wav |
video | 表明是某种视频文件 | video/webm, video/ogg |
application | 表明是某种二进制数据 |
application/octet- stream, application/pkcs12, application/ynd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf, application/json |
HTTP/2.0
HTTP/1.x报文有-些性能上的缺点:
- 消息头不像消息主体一样会被压缩。
- 两个报文之间的header通常非常相似,但它们仍然在连接中重复传输。
- 无法复用。当在同一个服务器打开几个连接时,TCP热连接比冷连接更加有效。
HTTP/2.0引入了一个额外的步骤,它将HTTP/1.x消息分成帧并嵌入到流(stream)中。
[HTTP] HTTP消息相关推荐
- 微信公众号为指定openid用户推送消息
微信公众号为指定openid用户推送消息 微信提供的开放接口中,有两个给指定openid的用户发送信息的接口,适用场景应该是向 预约用户或者中奖用户发送消息. 第一个接口:客服发送消息 请求方式: P ...
- Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)
Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...
- python 网络编程之Socket通信案例消息发送与接收
背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...
- Android中Handler消息机制
作用:跨线程通信. 应用:AsyncTask.retrofit都对Handler进行了封装. 四要素:Message.MessageQueue.Looper.Handler Message简介: 线程 ...
- 2021年大数据Kafka(一):❤️消息队列和Kafka的基本介绍❤️
全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 消息队列和Kafka的基本介绍 一.什么是消息队列 二.消息队列的应用场景 ...
- java多线程消息队列_java多线程消息队列的实现
1.定义一个队列缓存池: private static List queueCache = new LinkedList(); 2.定义队列缓冲池最大消息数,如果达到该值,那么队列检入将等待检出低于该 ...
- 第五节 RabbitMQ在C#端的应用-消息收发
原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...
- [UWP]实现一个轻量级的应用内消息通知控件
[UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...
- MAP/CAP信令常见消息
SRI(MAP):Sending Routing Information,请求路由信息. MSC根据MS发起呼叫携带的MSISDN(被叫号码)向被叫MS归属HLR查询用户当前的路由信息.该消息通常包含 ...
- kafka消息会不会丢失
转载:https://baijiahao.baidu.com/s?id=1583469327946027281&wfr=spider&for=pc 消息发送方式 想清楚Kafka发送的 ...
最新文章
- NLP专栏|图解 BERT 预训练模型!
- 物料帐结算,库存差异为何在下月初冲回
- oracle备份片校验,oracle rman 备份日志单独备份和交叉校验
- caxa明细表导入零件材质_各种橡胶材质橡胶制品
- CodeForces 1191A---Tokitsukaze and Enhancement
- elementUI之switch应用的坑
- SQL 日期格式化处理.sql
- 堪比“脏牛”!“脏管道” 漏洞可获得Linux 所有主流发行版本的root权限
- socket编程(一)
- HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案
- 《C语言程序设计(第五版)谭浩强》学习笔记
- http://95u.free.fr/index.php,Electronic Software Distribution Service
- QQ通过xml卡片自动探测对方ip
- dell 2420 bios 降级文件,可以用回独立显卡
- 腾讯「文涌 (Effidit)」2.0版发布,打造更懂写作的智能助手
- A component is changing an uncontrolled input to be controlled. This is likely caused by the value
- 什么牌子的蓝牙耳机音质好?适合听歌的高音质蓝牙耳机推荐
- 关于 Kubernetes中NetworkPolicy(网络策略)方面的一些笔记
- 秃顶路人的计算机系统大作业Hello
- 修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能
热门文章
- mysql linux c tar_linux下mysql的tar包离线安装
- python模拟手机充值场景_appium+Python实例(二)模拟新建场景表(辅助测试执行)...
- matplotlib柱状图_Python可视化很简单,一文学会绘制柱状图、条形图和直方图
- lua 给userdata设置元表_UE4热更新:基于UnLua的Lua编程指南
- oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
- Linux下如何查看哪些进程占用的CPU内存资源最多
- [SDN] mininet walkthrough
- ibatis.net:第六天,QueryForList
- 【折腾的一个小玩意】基于jquery+百度音乐的音乐外链小工具
- (转)Android中JNI编程的那些事儿