Angular 5与PHP无法向服务器端文件发起POST请求问题排查
解决Angular向PHP发送请求时的404错误问题
你遇到的核心问题是请求路径配置错误,同时还需要处理跨域限制,我来一步步帮你排查解决:
1. 修正请求URL的核心错误
你当前的请求地址是http://localhost:4200/aff.local/test.php,这是把Angular开发服务器的端口(4200)和PHP虚拟主机的域名(aff.local)混在一起了——这两个是完全独立的服务:
- Angular运行在本地开发服务器
localhost:4200 - PHP脚本部署在虚拟主机
aff.local下
所以你需要把请求URL改成直接指向虚拟主机的地址:
this.http.post('http://aff.local/test.php', params, { headers: headerOptions })
2. 处理跨域请求限制
当你从localhost:4200向aff.local发送请求时,浏览器会触发跨域安全限制,这里提供两种常用的解决方式:
方案一:在PHP脚本中添加CORS响应头
在test.php的最顶部添加以下代码,允许Angular开发服务器的跨域请求:
<?php header("Access-Control-Allow-Origin: http://localhost:4200"); header("Access-Control-Allow-Methods: POST"); header("Access-Control-Allow-Headers: Content-Type"); // 原有的数据库连接等代码...
方案二:使用Angular代理配置(更推荐)
在Angular项目根目录创建proxy.conf.json文件,内容如下:
{ "/api": { "target": "http://aff.local", "secure": false, "changeOrigin": true, "pathRewrite": { "^/api": "" } } }
接着修改angular.json里的serve配置,加入代理引用:
"serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "你的项目名称:build", "proxyConfig": "proxy.conf.json" }, // 其他原有配置... }
之后把请求URL改成相对路径:
this.http.post('/api/test.php', params, { headers: headerOptions })
最后重启Angular开发服务器即可生效。
3. 确认虚拟主机配置的正确性
虽然你提到文件存在,但还是要检查以下几点:
- 虚拟主机
aff.local是否正确绑定到了PHP脚本所在的文件夹 - 本地
hosts文件是否添加了127.0.0.1 aff.local的映射 - 直接在浏览器访问
http://aff.local/test.php是否能正常打开(测试PHP服务是否正常运行)
额外提示:加密数据的传递优化
你用crypto.AES.encrypt得到的是一个对象,直接作为参数传递可能会出现格式问题,建议先转换成字符串再发送:
let enc = crypto.AES.encrypt(user, key).toString(); // 转换为字符串格式 const params = new HttpParams().set('name', enc);
这样PHP端收到的才是可正常处理的加密字符串,后续解密操作也能顺利进行。
内容的提问来源于stack exchange,提问作者alim1990
相关产品推荐
相关产品推荐

