如何在PHP中为跨源资源共享(CORS)请求正确配置指定多域名访问权限?
如何在PHP中为跨源资源共享(CORS)请求正确配置指定多域名访问权限?
嘿,我来帮你搞定这个CORS多域名配置的问题!
你之前的代码是直接把Access-Control-Allow-Origin设为单个域名,这种写法只能支持一个源。但要同时允许指定的多个域名,可不能直接在这个头里写多个域名哦——因为浏览器规定这个响应头的值只能是单个域名、*(通配符,允许所有)或者null,写多个的话浏览器会直接拦截请求。
正确的做法是动态匹配请求的源,步骤很清晰:
- 先把所有允许访问的域名存到一个数组里,方便后续校验
- 获取当前请求的
Origin头(这是浏览器发送请求时带过来的,标识请求来自哪个域名) - 检查这个请求源是否在我们的允许列表里,如果在,就把这个源设置到
Access-Control-Allow-Origin头里;如果不在,浏览器会自动阻止跨域请求,你也可以额外返回403状态码来明确拒绝
给你整理好的完整代码:
<?php error_reporting(0); // 定义允许访问的域名列表 $allowedOrigins = [ 'http://example1.com', 'http://example2.com', 'http://example3.com', 'http://example4.com' ]; // 安全获取请求的Origin头,避免未设置时出现报错 $requestOrigin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : ''; // 校验请求源是否在允许范围内,是的话就设置对应的响应头 if (in_array($requestOrigin, $allowedOrigins)) { header("Access-Control-Allow-Origin: $requestOrigin"); } // 保留你原来配置的其他CORS规则 header('Access-Control-Allow-Methods: POST'); header("Access-Control-Allow-Headers: Content-Type, Accept"); ?>
这样配置后,只有你指定的四个域名发起的跨域请求才会被服务器允许,完美解决你的需求~
备注:内容来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

