新北市网站建设_网站建设公司_定制开发_seo优化
2026/1/16 15:50:51 网站建设 项目流程

本文收录于「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 服务器(安装、配置、部署项目),关注专栏不迷路~如果本文对你有帮助,欢迎点赞 + 收藏 + 关注,你的支持是我持续更新的动力💪!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询