news 2026/4/17 15:43:55

【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/4/15 22:32:35

伤口结痂后还有必要使用促进愈合的药物吗?

口腔生理环境特殊&#xff0c;伤口愈合慢且易感染&#xff0c;对护理和药物适配性要求极高&#xff0c;而伤口愈合全周期亦需分阶段护理。在这一领域&#xff0c;虽有3M、施乐辉等国际企业及稳健医疗、振德医疗等国内企业布局相关产品&#xff0c;口腔健康细分领域也有高露洁、…

作者头像 李华
网站建设 2026/4/15 7:23:24

基于RKLLM的Qwen3-vl推理代码解析

写在前面 参考历史博客&#xff0c;成功把Qwen3-vl2b部署在RK3588上&#xff0c;但是对代码处理流程模糊&#xff0c;C底子差&#xff0c;遂做笔记于CSDN。难免出错&#xff0c;欢迎大家指出&#xff0c;交流。 项目结构build 通常是编译构建产物的临时目录&#xff0c;存放编译…

作者头像 李华
网站建设 2026/4/16 15:19:25

adb常用指令

1.日志抓取抓取所有日志&#xff08;推荐&#xff09;adb logcat -b main -b system -b radio -b events -v time > all_logs.txt这是最常用的命令&#xff0c;可一次性捕获 main&#xff08;主应用日志&#xff09;、system&#xff08;系统日志&#xff09;、radio&#x…

作者头像 李华
网站建设 2026/4/15 11:00:47

光圈智选首页升级:升佣 + 选品提速双 buff

光圈智选新版首页已完成重构上线&#xff0c;围绕带货场景中的“高效选品”与“收益提升”两大核心痛点优化&#xff0c;打通从选品到收益转化的全链路体验&#xff0c;为达人、商家的带货运营提供更高效的工具支撑。选品能力升级&#xff1a;精准匹配需求&#xff0c;提升选品…

作者头像 李华
网站建设 2026/4/8 20:47:39

收藏!AI焦虑别慌,程序员为啥要学大模型?零基础系统入门指南

近来技术圈的“AI焦虑”持续蔓延&#xff0c;“大模型”“AI替代程序员”这类话题反复霸占热搜与技术社群&#xff0c;不少从业者陷入莫名的恐慌与迷茫。 相信很多程序员都有这样的疑问&#xff1a;在AI浪潮席卷各行各业的当下&#xff0c;到底该不该主动掌握AI大模型相关能力&…

作者头像 李华