PHP实现跨域资源共享CORS全方案及响应头设置
使用PHP处理跨域请求需设置CORS响应头,允许指定源、方法和请求头;2.需正确响应OPTIONS预检请求并退出脚本;3.生产环境应校验Origin白名单并支持凭证时禁用通配符;4.可结合请求类型动态调整响应头以提升安全与性能。
使用PHP处理跨域请求需设置CORS响应头,允许指定源、方法和请求头;2. 需正确响应OPTIONS预检请求并退出脚本;3. 生产环境应校验Origin白名单并支持凭证时禁用通配符;4. 可结合请求类型动态调整响应头以提升安全与性能。

在使用 PHP 开发 Web API 时,前端跨域请求是常见问题。浏览器出于安全考虑实施同源策略,限制了不同源之间的资源请求。CORS(Cross-Origin Resource Sharing)是 W3C 标准解决方案,通过设置 HTTP 响应头来允许跨域访问。PHP 可以灵活控制响应头,实现完整的 CORS 支持。
基础 CORS 响应头设置
最简单的跨域支持是对所有来源开放读取权限。适用于公开接口,但需注意安全性:
示例代码:
说明:
- Access-Control-Allow-Origin:指定允许的源。设为
*表示接受所有域,若需身份验证(如携带 Cookie),则不能使用通配符,必须明确指定域名,例如https://example.com。 - Access-Control-Allow-Methods:列出允许的 HTTP 方法。
- Access-Control-Allow-Headers:声明客户端允许发送的自定义请求头,如
Authorization、X-Requested-With等。
处理预检请求(Preflight Request)
某些请求会触发浏览器发送 OPTIONS 预检请求,判断服务器是否允许实际请求。这类请求包括:
- 非简单方法(如 PUT、DELETE、PATCH)
- 携带自定义请求头(如
Authorization) - Content-Type 不是以下之一:
text/plain、application/x-www-form-urlencoded、multipart/form-data
服务器必须正确响应 OPTIONS 请求,否则实际请求不会发出。
完整预检处理逻辑:
关键点:
- 必须检查
REQUEST_METHOD是否为OPTIONS。 - Access-Control-Max-Age 减少重复预检请求,提升性能。
- 确保
exit;阻止主业务逻辑执行。
动态允许来源与凭证支持
生产环境通常需要限制特定来源,并支持用户凭证(如 Cookie 或 Authorization 头)。
安全做法:白名单校验来源
说明:
- 只有匹配白名单的
Origin才返回对应头,避免通配符与凭证共用导致的安全错误。 - Access-Control-Allow-Credentials: true 允许前端设置
withCredentials = true发送 Cookie。 - 前端请求也必须设置
credentials: 'include'(fetch)或withCredentials: true(XMLHttpRequest)。
根据不同请求类型调整响应
可结合请求方法和内容类型做差异化处理:
'success']); } ?>
常见注意事项:
- 始终验证
Origin,防止反射式 XSS 风险。 - 敏感接口不要随意开启
Allow-Credentials。 - 调试时可用浏览器开发者工具查看“网络”选项卡中的请求头,确认预检是否成功。
- Nginx/Apache 也可配置 CORS,但 PHP 层更灵活,适合动态控制。
基本上就这些。掌握预检机制与响应头组合,就能应对各种跨域场景。不复杂但容易忽略细节。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















