【SpringBoot 快速开发】面向后端开发的 HTTP 协议详解:请求报文、响应码与常见设计规范
深入学习HTTP协议的基本概念、请求和响应格式掌握浏览器与服务器之间数据传输的规则理解HTTP协议的特点和应用场景。⚡ 快速参考HTTP是超文本传输协议规定了浏览器与服务器之间数据传输的规则HTTP协议特点基于TCP协议、请求-响应模型、无状态协议HTTP请求协议包括请求行、请求头、请求体HTTP响应协议包括响应行、响应头、响应体GET请求参数在请求行中POST请求参数在请求体中常见HTTP状态码200(成功)、404(资源不存在)、500(服务器错误)JSON是一种轻量级的数据交换格式广泛应用于Web开发 学习目标理解HTTP协议的基本概念和特点掌握HTTP请求协议的格式和组成部分掌握HTTP响应协议的格式和组成部分理解GET请求和POST请求的区别能够使用HttpServletRequest获取请求数据能够使用HttpServletResponse设置响应数据了解常见HTTP状态码的含义理解JSON格式的特点和应用场景一、HTTP概述1.1 介绍HTTPHyper Text Transfer Protocol(超文本传输协议)规定了浏览器与服务器之间数据传输的规则。http是互联网上应用最为广泛的一种网络协议http协议要求浏览器在向服务器发送请求数据时或是服务器在向浏览器发送响应数据时都必须按照固定的格式进行数据传输如果想知道http协议的数据传输格式有哪些可以打开浏览器点击F12打开开发者工具点击Network(网络)来查看浏览器向服务器进行请求时服务器按照固定的格式进行解析服务器向浏览器进行响应时浏览器按照固定的格式进行解析而我们学习HTTP协议就是来学习请求和响应数据的具体格式内容。1.2 特点我们刚才初步认识了HTTP协议那么我们在看看HTTP协议有哪些特点**基于TCP协议**面向连接安全TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议在数据传输方面更安全基于请求-响应模型:一次请求对应一次响应先请求后响应请求和响应是一一对应关系没有请求就没有响应HTTP协议是无状态协议:对于数据没有记忆能力。每次请求-响应都是独立的无状态指的是客户端发送HTTP请求给服务端之后服务端根据请求响应数据响应完后不会记录任何信息。缺点: 多次请求间不能共享数据优点: 速度快请求之间无法共享数据会引发的问题如京东购物。加入购物车和去购物车结算是两次请求由于HTTP协议的无状态特性加入购物车请求响应结束后并未记录加入购物车是何商品发起去购物车结算的请求后因为无法获取哪些商品加入了购物车会导致此次请求无法正确展示数据具体使用的时候我们发现京东是可以正常展示数据的原因是Java早已考虑到这个问题并提出了使用会话技术(Cookie、Session)来解决这个问题。具体如何来做我们后面课程中会讲到。刚才提到HTTP协议是规定了请求和响应数据的格式那具体的格式是什么呢? 接下来我们就来详细剖析。HTTP协议又分为请求协议和响应协议二、HTTP请求协议2.1 介绍**请求协议**浏览器将数据以请求格式发送到服务器。包括请求行、请求头 、请求体GET方式的请求协议请求行(以上图中红色部分) HTTP请求中的第一行数据。由请求方式、资源路径、协议/版本组成之间使用空格分隔请求方式GET资源路径/brand/findAll?nameOPPOstatus1请求路径/brand/findAll请求参数nameOPPOstatus1请求参数是以keyvalue形式出现多个请求参数之间使用连接请求路径和请求参数之间使用?连接协议/版本HTTP/1.1请求头(以上图中黄色部分) 第二行开始上图黄色部分内容就是请求头。格式为key: value形式http是个无状态的协议所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后就可以知道是谁想干什么了常见的HTTP请求头有:请求头含义Host表示请求的主机名User-Agent浏览器版本。 例如Chrome浏览器的标识类似Mozilla/5.0 …Chrome/79 IE浏览器的标识类似Mozilla/5.0 (Windows NT …)like GeckoAccept表示浏览器能接收的资源类型如text/*image/或者/*表示所有Accept-Language表示浏览器偏好的语言服务器可以据此返回不同语言的网页Accept-Encoding表示浏览器可以支持的压缩类型例如gzip, deflate等。Content-Type请求主体的数据类型Content-Length数据主体的大小单位字节举例说明服务端可以根据请求头中的内容来获取客户端的相关信息有了这些信息服务端就可以处理不同的业务需求。比如:不同浏览器解析HTML和CSS标签的结果会有不一致所以就会导致相同的代码在不同的浏览器会出现不同的效果服务端根据客户端请求头中的数据获取到客户端的浏览器类型就可以根据不同的浏览器设置不同的代码来达到一致的效果这就是我们常说的浏览器兼容问题请求体 存储请求参数GET请求的请求参数在请求行中故不需要设置请求体POST方式的请求协议请求行(以上图中红色部分)包含请求方式、资源路径、协议/版本请求方式POST资源路径/brand协议/版本HTTP/1.1请求头(以上图中黄色部分)请求体(以上图中绿色部分) 存储请求参数请求体和请求头之间是有一个空行隔开作用用于标记请求头结束GET请求和POST请求的区别区别方式GET请求POST请求请求参数请求参数在请求行中。例/brand/findAll?nameOPPOstatus1请求参数在请求体中请求参数长度请求参数长度有限制(浏览器不同限制也不同)请求参数长度没有限制安全性安全性低。原因请求参数暴露在浏览器地址栏中。安全性相对高2.2 获取请求数据Web服务器Tomcat对HTTP协议的请求数据进行解析并进行了封装(HttpServletRequest)并在调用Controller方法的时候传递给了该方法。这样就使得程序员不必直接对协议进行操作让Web开发更加便捷。代码演示如下RestControllerpublicclassRequestController{/** * 请求路径 http://localhost:8080/request?nameTomage18 * param request * return */RequestMapping(/request)publicStringrequest(HttpServletRequestrequest){//1.获取请求参数 name, ageStringnamerequest.getParameter(name);Stringagerequest.getParameter(age);System.out.println(name name, age age);//2.获取请求路径Stringurirequest.getRequestURI();Stringurlrequest.getRequestURL().toString();System.out.println(uri uri);System.out.println(url url);//3.获取请求方式Stringmethodrequest.getMethod();System.out.println(method method);//4.获取请求头Stringheaderrequest.getHeader(User-Agent);System.out.println(header header);returnrequest success;}}最终输出内容如下所示三、HTTP响应协议3.1 格式介绍响应协议服务器将数据以响应格式返回给浏览器。包括响应行 、响应头 、响应体响应行(以上图中红色部分)响应数据的第一行。响应行由协议及版本、响应状态码、状态码描述组成协议/版本HTTP/1.1响应状态码200状态码描述OK响应头(以上图中黄色部分)响应数据的第二行开始。格式为keyvalue形式http是个无状态的协议所以可以在请求头和响应头中设置一些信息和想要执行的动作这样对方在收到信息后就可以知道你是谁你想干什么常见的HTTP响应头有:Content-Type表示该响应内容的类型例如text/htmlimage/jpeg Content-Length表示该响应内容的长度字节数Content-Encoding表示该响应压缩算法例如gzip Cache-Control指示客户端应如何缓存例如max-age300表示可以最多缓存300秒;Set-Cookie:告诉浏览器为当前页面所在的域设置cookie;响应体(以上图中绿色部分) 响应数据的最后一部分。存储响应的数据响应体和响应头之间有一个空行隔开作用用于标记响应头结束3.1.1 响应状态码状态码分类说明1xx响应中 — 临时状态码。表示请求已经接受告诉客户端应该继续请求或者如果已经完成则忽略2xx成功 — 表示请求已经被成功接收处理已完成3xx重定向 — 重定向到其它地方让客户端再发起一个请求以完成整个处理4xx客户端错误 — 处理发生错误责任在客户端如客户端的请求一个不存在的资源客户端未被授权禁止访问等5xx服务器端错误 — 处理发生错误责任在服务端如服务端抛出异常路由出错HTTP版本不支持等关于响应状态码我们先主要认识三个状态码其余的等后期用到了再去掌握200 ok客户端请求成功404 Not Found请求资源不存在500 Internal Server Error服务端发生不可预期的错误3.2 常见的响应状态码状态码英文描述解释200OK客户端请求成功即处理成功这是我们最想看到的状态码302Found指示所请求的资源已移动到由Location响应头给定的 URL浏览器会自动重新访问到这个页面304Not Modified告诉客户端你请求的资源至上次取得后服务端并未更改你直接用你本地缓存吧。隐式重定向400Bad Request客户端请求有语法错误不能被服务器所理解403Forbidden服务器收到请求但是拒绝提供服务比如没有权限访问相关资源404Not Found请求资源不存在一般是URL输入有误或者网站资源被删除了405Method Not Allowed请求方式有误比如应该用GET请求方式的资源用了POST428Precondition Required服务器要求有条件的请求告诉客户端要想访问该资源必须携带特定的请求头429Too Many Requests指示用户在给定时间内发送了太多请求“限速”配合 Retry-After(多长时间后可以请求)响应头一起使用431Request Header Fields Too Large请求头太大服务器不愿意处理请求因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。500Internal Server Error服务器发生不可预期的错误。服务器出异常了赶紧看日志去吧503Service Unavailable服务器尚未准备好处理请求服务器刚刚启动还未初始化好状态码大全https://cloud.tencent.com/developer/chapter/135533.3 设置响应数据Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse)并在调用Controller方法的时候传递给了该方法。这样就使得程序员不必直接对协议进行操作让Web开发更加便捷。代码演示packagecom.itheima;importjakarta.servlet.http.HttpServletResponse;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.io.IOException;RestControllerpublicclassResponseController{RequestMapping(/response)publicvoidresponse(HttpServletResponseresponse)throwsIOException{//1.设置响应状态码response.setStatus(401);//2.设置响应头response.setHeader(name,itcast);//3.设置响应体response.setContentType(text/html;charsetutf-8);response.setCharacterEncoding(utf-8);response.getWriter().write(h1hello response/h1);}RequestMapping(/response2)publicResponseEntityStringresponse2(HttpServletResponseresponse)throwsIOException{returnResponseEntity.status(401).header(name,itcast).body(h1hello response/h1);}}浏览器访问测试响应状态码 和 响应头如果没有特殊要求的话通常不手动设定。服务器会根据请求处理的逻辑自动设置响应状态码和响应头。四、解决406报错status: 406, error: Not Acceptable, path: /depts找到pom文件中的lombok点击Ctrl 鼠标右键进入将其版本号改为1.18.34 因为最新版默认下载的是1.18.36不适配更改完后记得刷新maven即可解决。五、Json格式介绍5.1 JSON简介JSONJavaScript Object NotationJavaScript对象表示法是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言使用了类似于创建对象的语法来描述数据结构。尽管名为JavaScript对象表示法但JSON是语言无关的这意味着几乎所有现代编程语言都提供了处理JSON数据的能力。JSON格式有两种主要结构对象一个无序的键/值对集合。一个对象以{“开始”}“结束。每个键后跟一个冒号”:键/值对之间用逗号分隔。{name:John,age:30,isMarried:false}数组一个有序的值列表。一个数组以[“开始”]结束。值之间用逗号分隔。[Red,Green,Blue]5.2 应用场景JSON因其简洁和易于阅读的特性在多个领域中被广泛采用Web开发在客户端与服务器之间的数据传输中扮演着重要角色。例如通过AJAX请求从服务器获取数据时返回的数据格式通常为JSON。配置文件由于其结构化特性和易读性许多应用程序选择JSON作为配置文件格式。API设计RESTful API常使用JSON作为消息传递的标准格式因为它能够很好地支持复杂的数据结构并且具有良好的跨平台兼容性。NoSQL数据库一些NoSQL数据库如MongoDB使用JSON或其变种BSON来存储数据。这使得数据模型更加灵活适合快速迭代的应用程序。物联网(IoT)在物联网设备间进行数据交换时JSON也因其轻量级的特点而被广泛应用。对于资源受限的设备来说JSON提供了一种有效的方式来编码和解码数据。总的来说JSON已经成为网络上数据交换的事实标准之一无论是大型企业应用还是小型个人项目都可以看到它的身影。其简单性、可读性和强大的表达能力使其成为开发者们的首选数据格式之一。六、学习总结6.1 核心要点回顾HTTP是超文本传输协议规定了浏览器与服务器之间数据传输的规则HTTP协议特点基于TCP协议、请求-响应模型、无状态协议HTTP请求协议包括请求行、请求头、请求体HTTP响应协议包括响应行、响应头、响应体GET请求参数在请求行中POST请求参数在请求体中常见HTTP状态码200(成功)、404(资源不存在)、500(服务器错误)JSON是一种轻量级的数据交换格式广泛应用于Web开发6.2 实践建议请求方式选择GET用于查询操作参数在URL中POST用于新增操作参数在请求体中PUT用于更新操作DELETE用于删除操作状态码使用正确使用HTTP状态码便于前端处理2xx表示成功4xx表示客户端错误5xx表示服务器错误数据格式前后端交互推荐使用JSON格式JSON格式简洁、易读、易解析6.3 常见问题问题1406错误原因Lombok版本不兼容解决将Lombok版本改为1.18.34问题2中文乱码原因字符编码不一致解决统一使用UTF-8编码在请求头中设置Content-Type问题3跨域问题原因浏览器同源策略限制解决在后端配置CORS跨域支持

相关新闻

AI大模型学习路线_(非常详细)AI大模型学习路线,上车了兄弟们

AI大模型学习路线_(非常详细)AI大模型学习路线,上车了兄弟们

1. 打好基础:数学与编程 数学基础 线性代数:理解矩阵、向量、特征值、特征向量等概念。 推荐课程:Khan Academy的线性代数课程、MIT的线性代数公开课。 微积分:掌握导数、积分、多变量微积分等基础知识。 推荐课程:Kha…

2026/7/5 7:39:18 阅读更多 →
大模型技术基础学习路线,想要学好大模型应该具备哪些能力?

大模型技术基础学习路线,想要学好大模型应该具备哪些能力?

“大模型技术的基础学习,是未来在大模型领域能否站稳脚跟的关键” 随着大模型技术的发展,越来越多的人开始进入大模型领域,但大模型作为一门技术,因此它的本质上是一个工具,因此这也让学习大模型有了不同的学习方向。 …

2026/5/17 0:59:11 阅读更多 →
好写作AI:深夜赶论文,幸好有这个助手

好写作AI:深夜赶论文,幸好有这个助手

凌晨两点半,宿舍早就熄灯了。 你缩在书桌前,台灯是唯一的光源。电脑屏幕右下角的微信群安静了,朋友圈也没人更新了。整个世界都睡了,只有你还在和论文死磕。 第三章写到一半,思路断了。盯着光标闪了十分钟&#xff0…

2026/7/5 22:46:49 阅读更多 →

最新新闻

如何免费使用这款强大的AI图像增强工具:Real-ESRGAN-ncnn-vulkan终极完整指南

如何免费使用这款强大的AI图像增强工具:Real-ESRGAN-ncnn-vulkan终极完整指南

如何免费使用这款强大的AI图像增强工具:Real-ESRGAN-ncnn-vulkan终极完整指南 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: h…

2026/7/7 16:37:49 阅读更多 →
使用 DevEco Studio 配置 Flutter 鸿蒙签名

使用 DevEco Studio 配置 Flutter 鸿蒙签名

签名是鸿蒙应用从开发到发布绕不开的一环。本文以 E-Brufen 的真实签名为例,详解完整的证书配置流程。 一、为什么需要签名? HarmonyOS 要求所有 HAP 包必须经过数字签名才能安装运行。签名体系包含四个关键文件: 文件扩展名用途密钥库.p12…

2026/7/7 16:37:49 阅读更多 →
数电发票开票的订单明细金额一般不能为0

数电发票开票的订单明细金额一般不能为0

数电发票订单明细中单项金额为‌0元通常不符合常规经营业务规定‌,除非属于特定的‌视同销售、样品赠送或差额征税调整‌等合规场景,否则可能被系统判定为异常交易。核心判断标准‌一般商品/服务销售‌:若发生真实交易并收取款项,…

2026/7/7 16:35:49 阅读更多 →
单次示范实现可变形物体上下文模仿学习

单次示范实现可变形物体上下文模仿学习

1. 项目概述:这不是“教机器人折纸”,而是让机器真正理解“形变”的物理直觉“Instant-Fold”这个名字乍一听像某个极客玩具的代号,但如果你拆开来看——Instant(瞬时) Fold(折叠),它…

2026/7/7 16:35:49 阅读更多 →
3个关键步骤突破单细胞RNA测序分析瓶颈:STARsolo终极实战指南

3个关键步骤突破单细胞RNA测序分析瓶颈:STARsolo终极实战指南

3个关键步骤突破单细胞RNA测序分析瓶颈:STARsolo终极实战指南 【免费下载链接】STAR RNA-seq aligner 项目地址: https://gitcode.com/gh_mirrors/st/STAR 单细胞RNA测序分析中的比对效率直接决定了研究进展的速度,而STARsolo作为STAR比对器的集成…

2026/7/7 16:33:48 阅读更多 →
2026最新8款企业级AI编程工具 基础版免费权威盘点

2026最新8款企业级AI编程工具 基础版免费权威盘点

作为运维出身的DevOps工程师,我常年在掘金、CSDN分享企业级开发与运维经验,深度使用过各类AI编程工具。最近在智能家居控制台(项目代号:HomeControl V3.0)的开发中,我深刻体会到企业级AI编程工具的重要性。…

2026/7/7 16:31:48 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻