news 2026/3/8 4:24:22

【Day31】Web 开发入门:HTTP 协议详解(请求 / 响应、状态码、请求头)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Day31】Web 开发入门:HTTP 协议详解(请求 / 响应、状态码、请求头)

本文收录于「Java 学习日记:从入门到架构师」专栏,系统化记录 Java 全栈学习之路,关注专栏解锁更多 Java 基础、框架、底层原理干货~

一、为什么要学 HTTP 协议?

作为 Java 开发者,无论你是做后端接口开发、SpringBoot 项目实战,还是对接前端,HTTP 协议都是绕不开的核心基础。你写的 Controller 接口最终要通过 HTTP 协议对外提供服务,前端的每一次请求、后端的每一次响应,本质上都是 HTTP 协议的交互过程。

不懂 HTTP,你可能会遇到这些问题:

  • 前端传参后端收不到,排查半天不知道是请求头的问题;
  • 接口返回 404/500/403 状态码,只知道报错却不懂含义;
  • 做文件上传、跨域请求时,卡在协议层面无法推进。

今天这篇日记,我们就把 HTTP 协议的核心知识点讲透,从请求 / 响应结构、状态码到请求头,结合 Java 实战案例,让你真正理解并能用起来。

二、HTTP 协议核心认知:超文本传输协议

HTTP(HyperText Transfer Protocol)即超文本传输协议,是基于 TCP/IP 的应用层协议,用于客户端(浏览器 / Postman)和服务器之间的通信,核心特点:

  • 无状态:协议本身不记录通信状态(需 Cookie/Session 补充);
  • 无连接:HTTP1.1 前每次请求都要建立新 TCP 连接(1.1 引入长连接);
  • 明文传输:数据直接传输,HTTPS 则是加密版 HTTP。

简单来说:你(客户端)通过 HTTP 告诉服务器 “要什么”,服务器通过 HTTP 告诉你 “给什么 / 不给什么”

三、HTTP 请求:客户端到底发了什么?

当你在浏览器输入网址、点击按钮,或用 Postman 调用接口时,客户端会向服务器发送一个 HTTP 请求,完整的请求结构包含 3 部分:

1. 请求行(核心)

格式:请求方法 URL 协议版本示例:GET /user/1 HTTP/1.1

  • 请求方法:最常用的 2 种(必须掌握):
    • GET:从服务器 “获取” 数据,参数拼在 URL 后(如/user?id=1),传输数据量小、不安全;
    • POST:向服务器 “提交” 数据(如登录、提交表单),参数放在请求体中,传输数据量大、更安全。其他方法(PUT/DELETE/PATCH)后续进阶篇再讲。
  • URL:要访问的服务器资源路径;
  • 协议版本:主流是 HTTP/1.1,HTTP/2 性能更优。

2. 请求头(关键)

请求头是键值对形式,用于告诉服务器 “额外信息”,比如客户端类型、请求数据格式、认证信息等。

高频请求头(必记)

请求头作用举例
Host目标服务器域名(如www.baidu.com
Content-Type请求体的数据格式(核心!)
User-Agent客户端类型(如浏览器 / Postman/Java 程序)
Authorization认证信息(如 Token、Basic Auth)
Cookie客户端存储的会话信息

其中Content-Type是后端开发中最常接触的:

  • application/json:请求体是 JSON 格式(SpringBoot 接口最常用);
  • application/x-www-form-urlencoded:表单提交默认格式;
  • multipart/form-data:文件上传专用格式。

3. 请求体(可选)

只有 POST/PUT 等方法会有请求体,用于存放要提交的数据(如 JSON、表单数据、文件)。示例(JSON 格式):

json

{ "username": "java_diary", "password": "123456" }

Java 实战:模拟 HTTP 请求(基于 HttpClient)

java

运行

import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpClientDemo { public static void main(String[] args) throws Exception { // 1. 创建HttpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); // 2. 构建POST请求 HttpPost post = new HttpPost("http://localhost:8080/user/login"); // 3. 设置请求头(核心:指定JSON格式) post.setHeader("Content-Type", "application/json"); post.setHeader("User-Agent", "Java-HttpClient"); // 4. 设置请求体 String jsonBody = "{\"username\":\"java_diary\",\"password\":\"123456\"}"; post.setEntity(new StringEntity(jsonBody, "UTF-8")); // 5. 发送请求并获取响应 String response = EntityUtils.toString(httpClient.execute(post).getEntity()); System.out.println("响应结果:" + response); // 6. 关闭客户端 httpClient.close(); } }

依赖(Maven):

xml

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency>

四、HTTP 响应:服务器到底返回了什么?

服务器接收到请求后,会返回一个 HTTP 响应,结构和请求对应,也包含 3 部分:

1. 状态行(核心)

格式:协议版本 状态码 状态描述示例:HTTP/1.1 200 OK

状态码是核心,按首位数字分为 5 类(必记):

类别首位数字含义高频示例
成功2xx请求处理成功200(成功)、201(创建成功)
重定向3xx需要进一步操作301(永久重定向)、302(临时重定向)
客户端错误4xx客户端请求有问题400(参数错误)、401(未认证)、403(无权限)、404(资源不存在)
服务器错误5xx服务器处理失败500(服务器内部错误)、503(服务不可用)

2. 响应头

服务器返回的额外信息,比如数据格式、响应时间、Cookie 等。高频响应头:

  • Content-Type:响应体的数据格式(如application/json;charset=UTF-8);
  • Set-Cookie:服务器向客户端设置 Cookie;
  • Content-Length:响应体的字节长度。

3. 响应体(核心)

服务器返回的实际数据,比如 JSON、HTML、图片等。示例(JSON 格式):

json

{ "code": 200, "msg": "登录成功", "data": { "userId": 1001, "username": "java_diary" } }

五、避坑指南:新手常踩的 HTTP 协议坑

  1. GET 请求传参过大:GET 参数拼在 URL 后,浏览器 / 服务器对 URL 长度有限制(一般 2KB),大参数请用 POST;
  2. Content-Type 不匹配:前端传 JSON 但 Content-Type 写了form,后端@RequestBody会解析失败;
  3. 状态码乱用:比如明明是客户端参数错误,却返回 500(应返回 400),不利于排查问题;
  4. 忽略编码问题:请求 / 响应未指定UTF-8,导致中文乱码(需在请求头 / 响应头指定 charset)。

六、今日实战小任务

  1. 用 Postman 发送 GET 请求:http://httpbin.org/get,查看请求行、请求头、响应体;
  2. 用 Postman 发送 POST 请求,Body 选 JSON 格式,提交{"name":"Java日记"},查看响应状态码;
  3. 基于 SpringBoot 写一个简单接口,返回不同状态码(如 200、404、500),用 Postman 调用验证。

总结

  1. HTTP 协议是 Java Web 开发的基础,核心是客户端请求 - 服务器响应的交互模型,请求 / 响应均包含 “行 + 头 + 体” 三部分;
  2. Content-Type是前后端交互的关键请求头 / 响应头,需匹配数据格式;
  3. HTTP 状态码按首位数字分类,2xx 成功、4xx 客户端错、5xx 服务器错,是排查接口问题的核心依据。

下一篇【Day32】预告:Java Web 入门之 Tomcat 服务器(安装、配置、部署项目),关注专栏不迷路~如果本文对你有帮助,欢迎点赞 + 收藏 + 关注,你的支持是我持续更新的动力💪!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 15:00:31

c++设计模式-代理模式

一、模式简介代理模式是一种结构型设计模式&#xff0c;通过引入代理对象(Proxy)&#xff0c;实现客户端(Client)间接访问主题对象(Subject)。 优势&#xff1a; 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用&#xff1b; 代理对象可以扩展目标对象的功…

作者头像 李华
网站建设 2026/3/7 22:47:34

降级不降志!青岛红狮公开试训,传递继续征战的强烈信号

当中超、中甲各队正为新赛季厉兵秣马时&#xff0c;一支刚刚经历降级的球队&#xff0c;用一份掷地有声的公告&#xff0c;向外界宣告了其不屈的斗志。1月13日&#xff0c;上赛季从中甲降级的青岛红狮足球俱乐部&#xff0c;正式发布试训公告&#xff0c;面向全社会公开招募优秀…

作者头像 李华
网站建设 2026/2/18 9:40:09

OctShop源码高效灵活构建小程序多用户商城

随着移动互联网和社交网络的迅猛发展&#xff0c;小程序电商已成为企业数字化转型的重要抓手。在众多电商平台解决方案中&#xff0c;“OctShop小程序多用户商城”凭借其模块化架构、强大的多商户支持能力以及高度可定制性&#xff0c;逐渐成为中小企业、品牌商及创业者构建私域…

作者头像 李华
网站建设 2026/3/5 8:39:12

11种AI论文创作工具,集成LaTeX排版与自动化内容优化技术

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华
网站建设 2026/3/2 22:57:50

芯片级机密计算,天翼云CSV3筑牢数据“可用不可见”防线

芯片级机密计算&#xff0c;天翼云CSV3筑牢数据“可用不可见”防线当数据成为核心生产要素&#xff0c;“使用中”的安全难题愈发凸显——传统防护方案难以抵御底层高权限威胁&#xff0c;导致数据在计算时如同“裸奔”&#xff0c;制约金融、政务等关键领域的数据价值释放。天…

作者头像 李华