新手测试 Laravel POST 接口失败,应先检查:路由是否定义在 routes/api.php 并带 /api/ 前缀;Postman Body 是否选 JSON 且语法合法;区分 Postman(无同源限制)与前端(需 CSRF、CORS、认证头正确配置)的环境差异;确认 APP_URL 与 TrustProxies 设置避免协议错误。

新手测试 Laravel POST 接口失败,别急着改代码,先从最基础的几处检查——很多问题就卡在这几步上。
确认路由是否真的走对了文件和前缀
API 路由必须定义在 routes/api.php 里,且默认带 /api/ 前缀。比如你写的是 Route::post('/users', ...),那实际请求地址必须是 http://localhost:8000/api/users,而不是 /users 或 /api/api/users。如果删了路由文件里的 prefix => 'api',或手动加了重复前缀,就会 404。
另外,别把 API 路由写进 routes/web.php —— 那里默认用 web 中间件组,会触发 CSRF 校验、Session 启动等,导致 POST 直接 419 或重定向。
Postman 发送 JSON 时格式和头必须匹配
常见错误是:Body 选了 raw,但右上角没切到 JSON(而是 Text 或 HTML),结果 Laravel 收不到 request()->all(),验证直接报 422。
- 确保 JSON 语法合法:字符串用双引号,布尔值写
true/false,别写"true" - Content-Type 头不用手动加,Postman 选 JSON 会自动带上
application/json - 如果字段规则是
required|email,传空字符串""会被当成“有值但无效”,建议传null或干脆不传该字段
区分 Postman 成功和前端失败的根本原因
Postman 能通,但 fetch 或 axios 报 419、401 或跨域错误,不是接口问题,而是环境差异:
-
419:浏览器请求走了
web中间件或 Sanctum 的前端状态检测,触发了 CSRF 校验;API 路由应确保只用api中间件组,且不要额外套web -
401:认证头放错了位置,比如把
Authorization: Bearer xxx写在请求体里,而不是用withHeaders()或headers字段设在请求头 -
CORS 失败:Postman 不受同源策略限制,而浏览器会拦截;Laravel 默认不开 CORS,需装
fruitcake/laravel-cors或配置cors.php
检查协议和信任代理设置(尤其上线后)
本地开发正常,部署后 POST 提交变 301 或无响应?大概率是 HTTPS 协议没对齐:
- 确保
.env中APP_URL=https://yourdomain.com,且 Web 服务器(Nginx/Apache)正确传递X-Forwarded-Proto: https - 启用
TrustProxies中间件,在app/Http/Middleware/TrustProxies.php里填好代理 IP,并放开协议检测 - 否则 Laravel 会生成
http://开头的重定向或表单 action,浏览器拒绝提交 POST 数据


















