PHP解决跨域请求问题的两种实用方法详解

张开发
2026/4/4 4:10:49 15 分钟阅读
PHP解决跨域请求问题的两种实用方法详解
引言在Web开发中跨域资源共享CORS是一个常见的问题当前端页面与后端API不在同一个域名下时浏览器的同源策略会阻止跨域请求。本文将介绍两种在PHP中解决跨域请求问题的实用方法。什么是跨域问题跨域指的是浏览器不能执行其他网站的脚本这是由浏览器的同源策略造成的是浏览器对JavaScript施加的安全限制。同源策略要求协议、域名、端口三者都相同否则即为跨域。当出现跨域问题时浏览器控制台通常会出现类似以下的错误1Access to XMLHttpRequest athttp://api.example.com/datafrom originhttp://www.example.comhas been blocked by CORS policy: NoAccess-Control-Allow-Originheader is present on the requested resource.方法一使用header()函数设置CORS头这是一种简单直接的方法通过设置响应头来允许跨域访问。123456789101112131415?php// 设置允许跨域访问header(Access-Control-Allow-Origin: *);header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS);header(Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization);// 如果是OPTIONS请求直接返回200if($_SERVER[REQUEST_METHOD] OPTIONS) {http_response_code(200);exit();}// 你的API逻辑echojson_encode([message跨域请求成功]);?代码解析Access-Control-Allow-Origin: *允许所有域名访问*表示通配符Access-Control-Allow-Methods指定允许的HTTP方法Access-Control-Allow-Headers指定允许的请求头处理预检请求OPTIONS浏览器在发送实际请求前可能会先发送一个OPTIONS请求进行预检这里直接返回200表示允许优缺点优点实现简单适合开发环境快速测试缺点允许所有域名访问存在安全隐患不推荐在生产环境使用方法二针对特定域名允许跨域这种方法更加安全只允许指定的可信域名进行跨域访问适合生产环境使用。123456789101112131415161718192021222324252627282930313233?php// 允许指定的域名访问$allowed_origins [http://localhost:3000,https://myapp.com,https://staging.myapp.com];$origin$_SERVER[HTTP_ORIGIN] ??;if(in_array($origin,$allowed_origins)) {header(Access-Control-Allow-Origin: $origin);}else{// 或者允许所有不推荐生产环境// header(Access-Control-Allow-Origin: *);// 生产环境建议直接拒绝未授权域名http_response_code(403);exit(不允许的跨域请求);}header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS);header(Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With);header(Access-Control-Allow-Credentials: true);// 处理预检请求if($_SERVER[REQUEST_METHOD] OPTIONS) {http_response_code(200);exit();}// API业务逻辑?代码解析定义允许访问的可信域名列表$allowed_origins获取请求来源域名$origin检查请求来源是否在允许的列表中如果是则设置对应的响应头添加了Access-Control-Allow-Credentials: true头允许跨域请求携带cookie信息生产环境下对未授权的域名直接返回403错误优缺点优点安全性高只允许可信域名访问适合生产环境缺点需要维护允许访问的域名列表使用建议开发环境可以使用方法一快速测试无需考虑过多安全问题生产环境强烈推荐使用方法二只允许必要的可信域名访问对于需要携带身份凭证如cookie的跨域请求必须指定具体的允许域名不能使用通配符*可以将CORS设置封装成一个单独的文件在所有API入口文件中引入便于统一管理通过以上方法我们可以有效地解决PHP开发中的跨域请求问题同时在开发效率和系统安全之间取得平衡。

更多文章