PHP编程前后端分离怎么学_PHP前后端学习【详解】

星枫小哥_8458

星枫小哥_8458

2026-05-11

832人浏览

原创

php前后端分离需改掉三个默认习惯:不渲染html、不依赖session传状态、不混放前端文件;关键要显式设置json响应头、正确处理跨域、避免session在跨域下失效。

php编程前后端分离怎么学_php前后端学习【详解】

php 做前后端分离,不是“学个新东西”,而是**改掉三个默认习惯**:不渲染 HTML、不依赖 Session 传状态、不把前端文件塞进 public/ 目录里混着跑。只要绕开这三点,用 Laravel、ThinkPHP 或原生 php 都能快速跑通。

为什么直接返回 JSON 却总被浏览器下载或报错?

常见现象:访问 /api/users,浏览器弹出“下载文件”对话框,或者显示乱码、空白页;Chrome 控制台提示 MIME type text/html is not executable。

根本原因:PHP 脚本没声明响应类型,服务器默认返回 text/html,而前端(如 Axios)期望的是 application/json。

  • 所有 API 接口入口必须显式设置 header:header('Content-Type: application/json; charset=utf-8');
  • Laravel 中用 response()->json(),ThinkPHP 6+ 用 json() 或配置 'default_return_type' => 'json',别依赖 echo json_encode(...) 后不设 header
  • 确保没有意外输出:开头无空格、BOM、var_dump、print_r 残留,否则 JSON 会因前置内容而解析失败

跨域请求被拦住,OPTIONS 返回 405 或 500 怎么办?

开发时 Vue 在 http://localhost:5173,PHP 后端在 http://localhost:8000,一发请求就卡在预检(OPTIONS),控制台报 Response to preflight request doesn't pass access control check。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

手动加 header('Access-Control-Allow-Origin: *') 是最常踩的坑——它只解决一半问题,漏掉 OPTIONS 处理、凭据支持、方法白名单,上线必崩。

  • ThinkPHP 推荐装官方扩展:composer require topthink/think-cors,配 config/cors.php,生产环境禁用 *,写死前端域名
  • Laravel 用 fruitcake/laravel-cors,别自己写中间件拼 header
  • 如果后端完全无状态(如用 JWT),前端 Axios 请求可去掉 withCredentials: true,省去 Cookie / Session 跨域纠缠

登录后拿不到用户信息,$_SESSION 总是空?

前端调 /login 成功,但后续请求 /user/profile 返回 401,var_dump($_SESSION) 是空数组。这不是 PHP 配置问题,而是跨域下 Session ID 根本没传过来。

浏览器对跨域请求默认不携带 Cookie,而 PHP 的 Session 依赖 PHPSESSID Cookie 维持上下文。

  • 方案一(推荐):放弃 Session,改用 JWT。登录成功后返回 token,前端存在 localStorage,后续请求带 Authorization: Bearer xxx
  • 方案二(若必须用 Session):Axios 设置 withCredentials: true,后端 CORS 配置中 allow_credentials 设为 true,且 origin 不能为 * —— 二者缺一不可
  • 验证码、短信登录等场景,绝对不要把校验码存 Session,改用 Redis + 随机 captcha_id 透传,否则跨域下 100% 失效
真正卡住人的从来不是“怎么写接口”,而是**默认行为和跨域现实之间的断层**。比如 Laravel 默认开启 Session 中间件、ThinkPHP 默认启用模板引擎、Apache 默认不重写 history 路由——这些“方便”的背后,全是分离路上的暗桩。动手前先关掉它们,比学会十个新函数更重要。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php php编程

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6610

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6026

10

php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11204

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6501

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2155

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4108

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4834

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3791

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习