行业资讯

《Java 100 天进阶之路》第71篇:HTTP协议详解(2026版)

发布时间:2026/8/6 3:06:15
《Java 100 天进阶之路》第71篇:HTTP协议详解(2026版) 第71篇HTTP协议详解2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第70篇Cookie与Session |➡️ 下一篇第72篇JavaWeb面试高频题待发布️ 本文阅读地图3 分钟速览第70篇搞定了Cookie与Session本篇深入HTTP协议。HTTP是Java Web的地基——所有的Web开发都建立在这个协议之上。虽然日常开发中Spring MVC/Tomcat帮我们封装了大部分细节但理解HTTP协议的本质是写出高质量Web应用的必修课模块核心问题一句话回答HTTP是什么浏览器和服务器怎么说话HTTP是浏览器和服务器之间通信的语言和规则HTTP三大特点HTTP有什么核心特征基于TCP、请求-响应模型、无状态请求协议结构浏览器发给服务器的数据长什么样请求行 请求头 空行 请求体响应协议结构服务器返回的数据长什么样响应行 响应头 空行 响应体常见状态码200/301/302/400/403/404/500什么意思2xx成功、3xx重定向、4xx客户端错误、5xx服务器错误GET vs POST两者到底有什么区别GET参数在URL有大小限制POST参数在请求体无大小限制HTTPSHTTPS比HTTP安全在哪多了SSL/TLS加密层HTTP明文传输HTTP/2 vs HTTP/3新版本有什么改进HTTP/2多路复用HTTP/3用QUIC替代TCP解决队头阻塞一、核心知识点1. HTTP是什么HTTPHyperText Transfer Protocol超文本传输协议是互联网上应用最为广泛的一种网络协议。简单来说它是浏览器客户端和网站服务器之间进行沟通的语言和规则。本质理解HTTP规定了浏览器和服务器之间数据传输的规则——请求数据和响应数据都必须按照固定的格式进行传输。Web服务器如Tomcat负责把复杂的协议文本转换成简单的Java对象Request/Response让我们以面向对象的方式编程。2. HTTP的三大核心特点特点说明影响基于TCP协议面向连接、可靠传输数据不会丢失安全可靠请求-响应模型一次请求对应一次响应先请求后响应没有请求就没有响应无状态协议服务器不记录任何用户信息每次请求-响应都是独立的速度快但多次请求间不能共享数据无状态的坑HTTP无状态是指服务器响应完后不会记录任何信息。比如你加入购物车后去结算服务器不知道你加了什么——这就是Cookie和Session诞生的原因。优点速度快缺点多次请求间不能共享数据。二、通俗讲解1分钟开心学把HTTP想象成餐厅点餐你浏览器顾客服务员Web服务器/Tomcat负责接单和上菜HTTP协议你们之间约定的点餐规则点餐流程请求Request你对服务员说我要一份宫保鸡丁——这就是HTTP请求处理Processing服务员把订单传给后厨——这就是服务器处理业务逻辑响应Response后厨做好菜服务员端给你——这就是HTTP响应HTTP的无状态服务员记性不好你点完菜他就忘了你是谁。下次来他完全不记得你上次点了什么——这就是HTTP无状态。所以餐厅给你发了张会员卡Cookie卡上写着你的卡号Session ID后台档案柜Session存着你的完整信息。三、HTTP请求协议详解一个完整的HTTP请求由请求行 请求头 空行 请求体四部分组成。3.1 请求行Request Line请求行是HTTP请求的第一行数据由三部分组成组成部分说明示例请求方法告诉服务器要做什么GET、POST资源路径URI告诉服务器要去哪里取/提交数据/brand/findAll?nameOPPO协议版本告诉服务器用哪个HTTP版本HTTP/1.13.2 常见请求方法方法说明使用场景GET获取资源查询数据、访问页面POST传输实体主体提交数据登录、注册、上传文件PUT传输文件更新资源DELETE删除文件删除资源HEAD获得报文首部不返回数据确认URI有效性OPTIONS询问服务器支持哪些方法跨域预检请求最常用GET 和 POST面试必问3.3 常见请求头Request Headers请求头以key: value格式呈现请求头说明示例Host请求的主机名Host: www.example.comUser-Agent浏览器版本标识Mozilla/5.0 Chrome/91.0Accept浏览器能接收的资源类型text/html,application/jsonAccept-Language偏好的语言zh-CN,zh;q0.9Accept-Encoding支持的压缩类型gzip, deflateContent-Type请求主体的数据类型application/jsonContent-Length数据主体大小字节Content-Length: 348Cookie携带的Cookie数据Cookie: JSESSIONIDABC1233.4 GET vs POST —— 面试必问对比维度GETPOST参数位置请求行URL中请求体Body中参数大小有限制URL长度限制无限制安全性参数暴露在URL中不安全参数在请求体中相对安全缓存可被浏览器缓存不会被缓存书签可收藏为书签不可收藏使用场景查询、获取数据提交、修改、删除数据GET请求示例参数在URL中GET /brand/findAll?nameOPPOstatus1 HTTP/1.1 Host: www.example.comPOST请求示例参数在请求体中POST /user/login HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded usernamezhangsanpassword123456四、HTTP响应协议详解一个完整的HTTP响应由响应行 响应头 空行 响应体四部分组成。4.1 常见响应头Response Headers响应头说明示例Content-Type响应内容的类型text/html、application/jsonContent-Length响应内容的长度字节Content-Length: 348Content-Encoding响应压缩算法gzipCache-Control缓存策略max-age300Set-Cookie设置CookieSet-Cookie: JSESSIONIDABC123Location重定向地址Location: /login.html五、HTTP状态码 —— 面试必问状态码由三位数字组成首位数字决定类型。面试时不仅要记住数字更要说清楚场景。5.1 五大分类分类范围含义代表状态码1xx100-199信息响应请求正在处理100 Continue2xx200-299成功请求被正确处理200 OK3xx300-399重定向需要进一步操作301、3024xx400-499客户端错误400、401、403、4045xx500-599服务器错误5005.2 高频状态码详解状态码含义一句话解释发生场景200 OK请求成功“一切正常”查询成功、页面正常加载301 Moved Permanently永久重定向“这个地址永久搬家了”域名更换、HTTPS强制跳转302 Found临时重定向“这次先换个地址”登录后跳转、未登录跳转登录页400 Bad Request请求语法错误“你发的请求格式不对”参数格式错误、JSON格式错误401 Unauthorized未授权“你没登录不给你看”未登录访问需鉴权接口403 Forbidden禁止访问“登录了也不给你看”权限不足如普通用户访问管理员接口404 Not Found资源不存在“你要的东西不存在”URL写错、资源被删除500 Internal Server Error服务器内部错误“服务器代码出bug了”空指针异常、数据库连接失败面试加分301和302的区别是面试高频301是永久重定向浏览器会缓存新地址302是临时重定向每次都要去原地址。六、HTTPS —— HTTP的安全版本6.1 HTTP的三大安全缺陷HTTP采用明文传输默认监听80端口存在三大缺陷窃听风险传输内容可被中间人截获篡改风险传输内容可被中间人修改冒充风险无法确认对方身份6.2 HTTPS HTTP SSL/TLSHTTPS在HTTP和TCP之间加入了一层SSL/TLS加密层默认监听443端口。通俗理解HTTP是寄明信片——任何人都能看到内容。HTTPS是寄挂号信——内容加密只有收信人能看而且能确认发信人身份。6.3 TLS 1.2 vs TLS 1.32026年主流已经是TLS 1.3对比维度TLS 1.2TLS 1.3握手往返次数2次2-RTT1次1-RTT支持0-RTT模式握手速度较慢快50%以上加密算法支持多种含弱算法移除弱算法强制前向保密握手消息部分明文全程加密RTT解释RTTRound-Trip Time是网络往返延迟。TLS 1.3将握手从2次往返减少到1次显著降低连接建立延迟。七、HTTP/2 与 HTTP/3 —— 新时代的HTTP7.1 HTTP/1.1 的痛点同一连接只能串行处理请求浏览器需要建立多个TCP连接请求头重复传输浪费带宽存在队头阻塞——前面的请求慢了后面的都得等7.2 HTTP/2 的核心改进HTTP/2在TCP基础上引入了三大改进改进说明效果多路复用Multiplexing一个TCP连接同时处理多个请求/响应减少连接数提升并发头部压缩HPACK压缩重复的请求头减少85-90%的头部大小服务器推送Server Push服务器主动推送资源减少页面加载等待效果HTTP/2比HTTP/1.1快20-50%7.3 HTTP/3 的革命性升级HTTP/3用QUIC协议替代了TCP对比HTTP/2HTTP/3传输层TCPQUIC基于UDP队头阻塞存在TCP层面的阻塞解决独立数据流互不影响连接建立TCP握手 TLS握手2-3 RTTQUIC内置TLS 1.31-2 RTT网络切换连接断开需重连Connection ID支持无缝迁移一句话总结HTTP/2解决了应用层的队头阻塞但TCP层的队头阻塞依然存在。HTTP/3用QUIC彻底解决了这个问题。八、避坑要点错误/误区后果正确做法混淆GET和POST的使用场景用GET提交敏感信息密码暴露在URLGET用于查询POST用于提交/修改数据认为POST比GET更安全只是相对安全抓包一样能看到真正安全用HTTPS忘记处理HTTP状态码前端无法正确处理异常后端统一返回规范状态码错误信息不理解301和302的区别浏览器缓存了301导致无法回退临时跳转用302永久迁移用301生产环境用HTTP明文传输密码、Token被中间人截获生产环境强制HTTPS忽略Content-Type设置前端无法正确解析响应数据JSON接口设置application/json认为有了HTTPS就绝对安全SSL证书过期、中间人攻击仍存在定期检查证书配置HSTS九、面试高频考点Q1HTTP有哪些特点三大特点①基于TCP协议——面向连接、可靠传输②请求-响应模型——一次请求对应一次响应③无状态协议——服务器不记录任何用户信息每次请求-响应都是独立的。无状态带来速度快的好处但也导致多次请求间不能共享数据所以Java提出了Cookie和Session来解决这个问题。Q2GET和POST的区别①参数位置不同GET参数在请求行URL中POST参数在请求体中②参数大小限制不同GET有大小限制URL长度限制POST无限制③安全性不同GET参数暴露在URL中POST相对安全④使用场景不同GET用于获取数据POST用于提交数据⑤缓存不同GET可被缓存POST不可缓存。Q3301和302的区别301是永久重定向Moved Permanently表示资源已永久迁移到新地址浏览器会缓存新地址后续直接访问新地址。302是临时重定向Found表示资源临时换个地址访问浏览器不会缓存每次仍访问原地址。301常见于域名更换、HTTPS强制跳转302常见于登录后跳转。Q4HTTP和HTTPS的区别HTTPS HTTP SSL/TLS加密层。HTTP采用明文传输存在窃听、篡改、冒充三大风险HTTPS对传输内容加密安全性高。HTTP默认端口80HTTPS默认端口443。Q5HTTP/2和HTTP/3有什么区别HTTP/2引入了多路复用、头部压缩HPACK、服务器推送但底层仍是TCP存在TCP层的队头阻塞。HTTP/3用QUIC协议替代TCP彻底解决了队头阻塞问题连接建立更快1-2 RTT vs 2-3 RTT且支持网络无缝切换。 面试官追问陷阱加分题追问1“HTTP无状态那你怎么实现’记住用户登录状态’” HTTP本身无状态但可以通过Cookie和Session来弥补。服务器创建Session并生成Session ID通过Set-Cookie响应头下发给浏览器浏览器后续请求自动在请求头中携带Cookie: JSESSIONIDxxx。服务器根据Session ID识别用户身份。这就是会话跟踪技术的核心原理。追问2“同样是重定向为什么登录跳转用302而不是301” 因为登录跳转是临时性的——用户未登录时跳转到登录页登录后又跳转回来。如果用301浏览器会永久缓存这个重定向下次用户直接访问登录页URL也会被浏览器自动跳转造成混乱。302是临时重定向浏览器每次都会先请求原地址由服务器决定是否跳转更灵活。追问3“用户说’网页打不开显示404’可能是什么原因” 404表示资源不存在可能原因①URL拼写错误②资源已被删除或移动③部署时资源没有正确放到webapps目录下④路由配置错误如Spring MVC的RequestMapping路径写错。排查顺序先确认URL是否正确再检查服务端是否有对应资源。十、练习题简答题HTTP协议为什么是无状态的无状态带来了什么优缺点代码题在Spring Boot中分别写一个GET请求和POST请求的Controller接口并说明请求参数分别从哪里获取。分析题某系统上线后用户反馈登录成功后跳转到了错误页面。后端日志显示登录成功后返回了302但浏览器实际跳转到了/error。请分析可能的原因。 你的学习进度当前第71篇 / 共108篇 ·进阶篇JavaWeb核心技术第68~72篇✅ 已完成基础篇44篇 第45~71篇 正在学第71篇⏳ 待学习第72~108篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第72篇JavaWeb面试高频题》内容简介转发forwardvs 重定向sendRedirect的区别、getParametervsgetAttribute、Filter与Interceptor的区别、JavaWeb专题面试高频20问。JavaWeb专题收官之作拿下所有面试考点《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送