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消息相关推荐

  1. 微信公众号为指定openid用户推送消息

    微信公众号为指定openid用户推送消息 微信提供的开放接口中,有两个给指定openid的用户发送信息的接口,适用场景应该是向 预约用户或者中奖用户发送消息. 第一个接口:客服发送消息 请求方式: P ...

  2. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)

    Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...

  3. python 网络编程之Socket通信案例消息发送与接收

    背景 网络编程是python编程中的一项基本技术.本文将实现一个简单的Socket通信案例消息发送与接收 正文 在python中的socket编程的大致流程图如上所示 我们来首先编写客户端的代码: # ...

  4. Android中Handler消息机制

    作用:跨线程通信. 应用:AsyncTask.retrofit都对Handler进行了封装. 四要素:Message.MessageQueue.Looper.Handler Message简介: 线程 ...

  5. 2021年大数据Kafka(一):❤️消息队列和Kafka的基本介绍❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 消息队列和Kafka的基本介绍 一.什么是消息队列 二.消息队列的应用场景 ...

  6. java多线程消息队列_java多线程消息队列的实现

    1.定义一个队列缓存池: private static List queueCache = new LinkedList(); 2.定义队列缓冲池最大消息数,如果达到该值,那么队列检入将等待检出低于该 ...

  7. 第五节 RabbitMQ在C#端的应用-消息收发

    原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...

  8. [UWP]实现一个轻量级的应用内消息通知控件

    [UWP]实现一个轻量级的应用内消息通知控件 原文:[UWP]实现一个轻量级的应用内消息通知控件 在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDi ...

  9. MAP/CAP信令常见消息

    SRI(MAP):Sending Routing Information,请求路由信息. MSC根据MS发起呼叫携带的MSISDN(被叫号码)向被叫MS归属HLR查询用户当前的路由信息.该消息通常包含 ...

  10. kafka消息会不会丢失

    转载:https://baijiahao.baidu.com/s?id=1583469327946027281&wfr=spider&for=pc 消息发送方式 想清楚Kafka发送的 ...

最新文章

  1. NLP专栏|图解 BERT 预训练模型!
  2. 物料帐结算,库存差异为何在下月初冲回
  3. oracle备份片校验,oracle rman 备份日志单独备份和交叉校验
  4. caxa明细表导入零件材质_各种橡胶材质橡胶制品
  5. CodeForces 1191A---Tokitsukaze and Enhancement
  6. elementUI之switch应用的坑
  7. SQL 日期格式化处理.sql
  8. 堪比“脏牛”!“脏管道” 漏洞可获得Linux 所有主流发行版本的root权限
  9. socket编程(一)
  10. HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案
  11. 《C语言程序设计(第五版)谭浩强》学习笔记
  12. http://95u.free.fr/index.php,Electronic Software Distribution Service
  13. QQ通过xml卡片自动探测对方ip
  14. dell 2420 bios 降级文件,可以用回独立显卡
  15. 腾讯「文涌 (Effidit)」2.0版发布,打造更懂写作的智能助手
  16. A component is changing an uncontrolled input to be controlled. This is likely caused by the value
  17. 什么牌子的蓝牙耳机音质好?适合听歌的高音质蓝牙耳机推荐
  18. 关于 Kubernetes中NetworkPolicy(网络策略)方面的一些笔记
  19. 秃顶路人的计算机系统大作业Hello
  20. 修改MP4文件二进制内容,实现安卓Camera2旋转录制视频画面功能

热门文章

  1. mysql linux c tar_linux下mysql的tar包离线安装
  2. python模拟手机充值场景_appium+Python实例(二)模拟新建场景表(辅助测试执行)...
  3. matplotlib柱状图_Python可视化很简单,一文学会绘制柱状图、条形图和直方图
  4. lua 给userdata设置元表_UE4热更新:基于UnLua的Lua编程指南
  5. oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
  6. Linux下如何查看哪些进程占用的CPU内存资源最多
  7. [SDN] mininet walkthrough
  8. ibatis.net:第六天,QueryForList
  9. 【折腾的一个小玩意】基于jquery+百度音乐的音乐外链小工具
  10. (转)Android中JNI编程的那些事儿