[HTTP消息] 给你带来最清楚最明白的讲解!!!

本文深入解析HTTP协议,涵盖请求与响应消息结构,包括起始行、请求方法、状态码、请求头与响应头、请求主体与响应主体。同时,介绍了MIME类型及HTTP1.x的缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP消息

HTTP消息结构

HTTP请求消息和响应消息具体有相似的结构,由一下部分组成:

  1. startline(开始线/起始行):一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的
  2. HTTP headers(头部信息/首部信息):一个可选的HTTP头集合指明请求或描述消息正文。
  3. empty line(空线/空行):一个空行指示所有关于请求的元数据已经发送完毕
  4. body(正文):一个可选的包含请求相关数据的正文(比如HTML表单内容),或者响应相关的文档。正文的大小有起始行的HTTP头来指定

前两个start line+HTTP headers统称为请求头

后两个empty line+body称为消息主题/消息正文

请求和响应消息
  • HTTP请求消息:由客户端发送用来触发一个服务器上的动作。
  • HTTP响应消息:来自服务器的应答

接下来给大家带来一张通俗易懂的图 -.-

起始行

起始行(start-line)包含三个元素:

  1. 请求方法:描述要执行的动作。例如GET表示要获取资源,POST表示向服务器推送数据。
  2. 请求地址:通常是一个URL,或者是协议、端口和域名的绝对路径。
  3. HTTP版本:定义了剩余报文的结构,作为期望的相应版本的指示符。

起始行的代码

GET/home.html HTTP/1.1
请求方法

以下问题面试的时候有很大的几率会出现,也是经典的面试题

请求方法不止GET和POST

最常用的请求方法是什么? GET和POST

常见的请求方法至少有其中几种?分别是什么呢? 7种 ,分别是以下图中的前7种,后面两个了解即可。

请求方法描述
GETGET方法请求一个指定资源的表示形式。使用GET的请求应该只被用于获取数据
HEADHEAD方法请求一个与GET请求的响应相同的响应,但没有响应体
POSTPOST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改
PUTPUT方法用于请求有效载荷替换目标资源的所有当前表示
DELETEDELETE方法删除指定的资源
CONNECTCONNECT方法建立一个到由目标资源标示的服务器的隧道
OPTIONSOPTIONS方法用于描述目标资源的通信选项
TRACETRACE方法沿着到目标资源的路径执行一个消息环回测试
PATCHPATCH方法用于对资源应用部分修改
请求头

请求头允许客户端向服务器端传递附加信息。

他的格式是固定的,必须得有一个头部信息名称 ,不区分大小写 后跟着一个冒号“:”,后面跟具体的值(不带换行符)组成,当值多的话用逗号“,”分隔。

根据不同上下文,可将请求头分为:

  1. 通用头:同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头
  2. 请求头:包含更多有关要获取的资源或客户端本身信息的消息头。
  3. 实体头:包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型

那么请求头都是干什么呢?下面我将会用图形来对请求头常见的介绍一下

请求头的作用:里面会附加这各种各样的信息,那些信息也会携带的发送给服务器,服务器接收请求的时候这些附带信息也同样会被接收到,接收到之后会通过内容做出处理和反馈

请求主体

请求消息的最后一部分是请求主体。

  • 不是所有的请求都需要请求主体:例如获取资源的请求GET、HEAD、DELETE和OPTIONS,通常他们不需要请求主体
  • 有些请求将数据发送到服务器以便更新数据:常见的情况是POST请求(包含HTML表单数据).

请求主体大致分为两类:

  1. 单一资源主体:由一个单文件组成。该类型请求主体由两个header定义:Content-Type和Content-Length
  2. 多资源主体:由多部分请求主体组成,每一部分包含不同的信息位。通常是和HTML表单联系在一起.
状态行

HTTP响应消息的起始行被称为状态行(status line),包含以下信息

  1. 协议版本:通常为HTTP/1.1
  2. 状态码:表名请求是成功或失败。常见的状态码是200,404或者302.
  3. 状态文本:一个简短的,纯粹的信息,通过状态码的文本描述,帮助人们理解该HTTP消息
HTTP/1.1 200 OK
状态码

状态码一共分为5大类

信息响应
状态码描述
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响应请求(本来你请求A服务器,他给你转接到B服务器,这就叫做重定向)
303 See Other对应当前请求的响应可以在另一个UN上被找到,而且客户端应当采用GET的方式访问那个资源
304 Not Modified如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容自上次访问以来或者根据请求的条件)并没有改变
客户端响应
状态码描述
400 Bad Request语义有误,当前请求无法被服务器理解
401 Unauthorized当前请求需要用户验证
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协议版本
响应头

道理和请求头的差不多

响应头允许服务器端向客户端传递附加信息。

他的格式是固定的,必须得有一个头部信息名称 ,不区分大小写 后跟着一个冒号“:”,后面跟具体的值(不带换行符)组成,当值多的话用逗号“,”分隔。

根据不同上下文,可将响应头分为:

  1. 通用头:同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头
  2. 响应头:包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头
  3. 实体头:包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型

响应主体

响应消息的最后一部分是响应主体。不是所有的响应都需要响应主体:例如具有状态码(如201或204)的响应,通常不会有响应主体。
响应主体大致可分为两类

  1. 单一资源主体:由已知长度的单个文件组成。该类型响应主体由两个 header定义: Content Type和 Content-length
  2. 单一资原主仲:由未知长度的单个文件组成,通过将 Transfer- Encoding设置为 chunked来使用chunks编码
  3. 多资源主体:由多部分响应主体组成,每部分包含不同的信息段。但这是比较少见的。
MIME类型

MIME类型全称为Multipurpose Internet Mail Extensions,被译为多用途Internet扩展类型,是一种标准化的方式来表示文档的性质和格式

下面是咱们常见的MIME类型

类型描述经典实例
text表明文件是普通文本text/plain, text/html, text/css, text/javascript
image表明是某种图像image/gif, image/png, image/jped, image/bmp, image/webp
audio表名是某种音频文件audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video表名是某种视频文件video/webm, video/ogg
application表名是某种二进制数据application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf, application/json
HTTP1.x缺点

HTTP/1.x报文有一些性能上的缺点:

  • 消息头不像消息主题一样会被压缩。
  • 两个报文之间的header通常非常相似,但他们仍然在连接中重复传输。
  • 无法复用。当在同一个服务器打开几个连接时,TCP热连接比冷连接更加有效。

HTTP/2.0引入了一个额外的步骤,它将HTTP/1.X消息分成帧并嵌入到流(stream)中.

——————————————————————————————————————

整理不易,点个赞再走吧 =ω

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值