HTTP协议请求响应模型

什么是HTTP协议

HTTP 是一个应用层协议,专门用来在两台主机之间传输文字、图片、音频、视频等超文本数据的约定和规范。全称:超文本传输协议。

请求-响应模型:

请求报文的结构与组成部分

HTTP请求报文是客户端向服务器发送请求时的数据格式,由请求行、请求头部、空行和请求体组成。每个部分都包含了特定的信息,用于告知服务器请求的操作、目标资源、附加信息和数据。
HTTP请求报文的结构如下:

请求行
请求头部
空行
请求体

下面是各个部分的详细解释:

  1. 请求行: 请求行是请求报文的第一行,它包含了请求的基本信息,如请求方法、目标URL和HTTP协议版本。请求行的格式如下:

    请求方法 请求目标 URL HTTP协议版本
    
    • 请求方法(Method):表示请求的操作,常见的有 GET、POST、PUT、DELETE 等。
    • 请求目标 URL(URL):表示请求的目标资源的URL地址。
    • HTTP协议版本:表示使用的HTTP协议版本,如 HTTP/1.1。
  2. 请求头部(Request Headers): 请求头部包含了客户端向服务器传递的额外信息,以键值对的形式表示。每个键值对占一行,以冒号分隔,例如:

    Host: www.example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36
    

    常见的请求头字段有:

    • Host:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
    • User-Agent:声明用户的操作系统和浏览器版本信息;
    • Accept:表示客户端所能接受的响应内容类型,服务器可以根据该字段选择合适的响应格式。
    • Referer:当前页面是从哪个页面跳转过来的;
    • Cookie:表示客户端的Cookie信息。
    • Content-Type: 数据类型(text/html等)。
    • Content-Length: 数据包的长度。
    • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
    • Connection:表示客户端的连接持续状态,常见的取值有 “keep-alive” 和 “close”。“keep-alive” 表示保持持久连接,“close” 表示关闭连接。
    • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
  3. 空行: 空行用于分隔请求头部和请求体,不包含任何内容,只有一个换行符。

  4. 请求体(Request Body): 请求体包含了客户端向服务器发送的数据,通常在 POST 或 PUT 请求中使用。例如,当客户端提交表单数据或上传文件时,数据就在请求体中。请求体的格式和内容根据请求的实际需求而定。

http请求实例图

在这里插入图片描述

响应报文的结构与组成部分

HTTP响应报文是服务器向客户端(如浏览器)发送响应时所使用的数据格式,由状态行、响应头部、空行和响应体组成。每个部分都包含了特定的信息,用于告知客户端响应的状态、附加信息和数据。报文的结构如下:

状态行
响应头部
空行
响应体

下面是各个部分的详细解释:

  1. 状态行(Status Line): 状态行是响应报文的第一行,它包含了响应的基本信息,如HTTP协议版本、状态码和状态消息。状态行的格式如下:

    HTTP协议版本 状态码 状态消息
    
    • HTTP协议版本:表示使用的HTTP协议版本,如 HTTP/1.1。
    • 状态码(Status Code):表示请求的结果状态,如 200(成功)、404(未找到)、500(服务器内部错误)等。
    • 状态消息(Status Message):与状态码对应的描述性文本,例如 OK、Not Found、Internal Server Error 等。
  2. 响应头部(Response Headers): 响应头部包含了服务器向客户端传递的额外信息,以键值对的形式表示。每个键值对占一行,以冒号分隔,例如:

    Content-Type: text/html; charset=utf-8
    Content-Length: 1024
    

    常见的响应头字段有:

    • Content-Type:表示响应体的内容类型。
    • Content-Length:表示响应体的长度。
    • Server:表示服务器的信息。
    • Set-Cookie:表示需要在客户端设置的Cookie信息。
    • Location:表示重定向的目标地址等。
  3. 空行: 空行用于分隔响应头部和响应体,不包含任何内容,只有一个换行符。

  4. 响应体(Response Body): 响应体包含了服务器向客户端发送的数据,通常是响应的实际内容。例如,当服务器返回网页、图片、文件等内容时,数据就在响应体中。响应体的格式和内容根据实际响应的需求而定。

http响应实例图

在这里插入图片描述

为什么请求结构和响应结构中都包含一个空行

我们知道,HTTP 是基于 TCP 传输协议进行通信的,而使用了 TCP 传输协议,就会存在一个“粘包”的问题,HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为 HTTP body 的边界,这两个方式都是为了解决“粘包”的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值