3、HTTP请求报文和响应报文是怎样的,有哪些常见的字段?【中高频】

embedded/2025/3/1 22:42:50/

HTTP请求报文主要是由 请求行、请求头部、空行和请求体 四部分组成(第一行必须是一个请求行(request line),用来说明请求类型、要访问的 资源 以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

HTTP请求头https://i-blog.csdnimg.cn/img_convert/d9b42fe05dd527d1d0eab7ba9062dbba.png" width="466" />

  1. 请求行

  • 主要由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。

    (例如,GET /index.html HTTP/1.1

    • 请求方法字段 ,方法就是指定我们要取执行的操作,比如GET方法、PUT方法、POST、DELETE

    • URL字符字段,也就是资源的路径【注1】

    • HTTP协议版本字段,比如说 HTTP/1.1或HTTP/2.0

  1. 请求头部

  • 请求头部由 关键字:值 对组成,每行一对,关键字和值用英文冒号“:”分隔。

  • 请求头部用于通知服务器 关于客户端请求的信息,典型的请求头有:

    • Host:表示 客户端发送请求时,用来指定 服务器的域名

    • Connection 字段:最常用于客户端要求服务器使用「HTTP 长连接」机制,以便其他请求复用

    • Accept 字段:声明自己 可以接受哪些数据格式

除此以外,还有很多其他的常用字段,其中与请求体相关的最常使用的请求头是Content-Type和Content-Length

  1. 空行

    • 最后一个请求头之后是一个空行,通知服务器以下不再有请求头

    • 对于一个完整的请求报文来说 空行是必须的,否则服务器会认为 本次请求的数据 没有完全发送过来,将一直处于等待状态

  2. 请求体

    • 请求体不在GET方法中使用,而是在POST方法中使用

GET方法请求实例:

GET /books/?name=Professional%20Ajax HTTP/1.1  //请求行Host: www.wrox.com                             //请求头User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive//空行

post方式请求实例:

POST / HTTP/1.1             //请求行Host: www.wrox.com          //请求头User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Content-Type: application/x-www-form-urlencoded  //指定POST数据的编码类型Content-Length: 40Connection: Keep-Alive(此处空一行)name=Professional%20Ajax&publisher=Wiley  //请求数据,POST形式参数保存在这里,与请求数据相关的请求头是Content-Type和Content-Length。

HTTP响应报文用于传达 服务器 对 客户端 请求的 处理结果和数据,它主要由状态行、响应头部、空行和响应体 四部分组成(在响应中唯一真正的区别在于第一行中用状态 信息 代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况)

imghttps://i-blog.csdnimg.cn/blog_migrate/73863272a225558d91bac497a9fb212f.png" />

  1. 状态行

    • 由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔

      • 状态码为3位数字,200〜299的状态码表示成功,300〜399的状态码指资源重定向,400〜499的状态码指客户端请求出错,500〜599的状态码指服务端出错( HTTP / 1.1向协议中引入了信息性状态码,范围为100〜199)

      • 常见的状态码:

        200 响应成功

        302 跳转,跳转地址通过响应头中的位置属性指定(JSP中Forward和Redirect之间的区别)

        400 客户端请求有语法错误,不能被服务器识别

        403 服务器接收到请求,但是拒绝提供服务(认证失败)

        404 请求资源不存在

        500 服务器内部错误

  2. 响应头部

    • 类似于请求头部,作用是把 服务器响应 的信息 告知 给客户端,主要包含的字段有:

      • Content-Length 字段:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度

      • Content-Type 字段:用于服务器回应时,告诉客户端,本次数据是什么格式

      • Content-Encoding 字段:说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式

除此以外,还有很多其他的常用字段

  1. 空行

    • 最后一个响应头之后是一个空行,表示响应头的结束

  2. 响应体

    • 存放 服务器实际传输的数据, 可以是文本、HTML页面、图片、视频等,也可能为空

响应实例:

HTTP/1.1 200 OK //响应行Date: Sat, 31 Dec 2005 23:59:59 GMT //响应头Content-Type: text/html;charset=ISO-8859-1Content-Length: 122//空行<html><head><title>Wrox Homepage</title></head><body><!-- body goes here --></body></html>

【注1】

  • URL:不仅唯一标识了资源,还提供了资源的具体访问路径

  • URN: 统一资源标识符,用来唯一标识互联网上资源的一个字符串。它可以用来定位任何类型的资源,包括网页、图片、文件、视频、服务等

  • URI:它可以是URL,也可以是URN


http://www.ppmy.cn/embedded/169167.html

相关文章

深度探索:DeepSeek与鸿蒙HarmonyOS应用开发的深度融合

文章目录 一、概述1.1 什么是DeepSeek?1.2 鸿蒙HarmonyOS的特点 二、技术优势与应用场景2.1 技术优势2.2 应用场景 三、开发指南3.1 环境搭建3.2 集成AI模型3.3 分布式任务调度 四、实际案例分析4.1 智能家居控制4.2 智能健康监测 五、未来展望《AI智能化办公&#…

【愚公系列】《Python网络爬虫从入门到精通》033-DataFrame的数据排序

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

9、HTTP/2与HTTP/1.1的区别?【高频】

二进制协议: HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,报文头部和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据…

BigDecimal 为什么可以不丢失精度?

本文已收录至Java面试网站:https://topjavaer.cn 大家好,今天咱们来聊聊 Java 中的 BigDecimal。在金融领域,数据的精确性相当重要,一个小数点的误差可能就意味着几百万甚至几千万的损失。而 BigDecimal 就是专门用来解决这种高精…

SQL Server 链接服务器 MySQL 详细步骤

目录 前言 一、准备工作 1. 确认需求 2. 获取权限 二、安装必要的驱动程序和工具 1.下载并安装MySQL ODBC驱动: 2.安装 SQL Server 和 MySQL 的管理工具: 三、配置 SQL Server 以连接到MySQL 1.执行创建链接服务器的T-SQL语句: 2.配…

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意:GD32F450 总共有三种封装形式,本文所述的相关代码和知识,均为 GD32F450IX 系列。 1. 相关知识 参数配…

Linux(CentOS)安装 MySQL

CentOS版本:CentOS 7 三种安装方式: 一、通过 yum 安装,最简单,一键安装,全程无忧。 二、通过 rpm 包安装,需具备基础概念及常规操作。 三、通过 gz 包安装,需具备配置相关操作。 --------…

uniapp中使用leaferui使用Canvas绘制复杂异形表格的实现方法

需求: 如下图,要实现左图的样式,先实现框架,文字到时候 往里填就行了,原来的解决方案是想用css,html来实现,发现实现起来蛮麻烦的。我也没找到合适的实现方法,最后换使用canvas来实现&#xff…