appserver跨域配置支持多域名时,存在跨域问题,问题重现步骤如下
'appserver_cors' => [ .... //域名请换成自己真实的 'Origin' => ['http://127.0.0.1', 'http://127.0.0.2'], //这样也有问题 'Origin' => ['*'], .... ]
我先记录一下吧。
记录一下
这个问题,你自己调试解决吧。
有这样的需求,应该环境也搭起来了,自己调试找找问题原因。
vue部分有一段时间没搞了。
这个问题,始终解决不了,求助大佬,我自己跟了半天代码,,没找到问题出在哪????
没看代码, 跨域实现基本都是基于Allow-Control-Allow-Origin来的吧, 而Allow-Control-Allow-Origin是不支持多条记录的, NGINX上的实现通过设置MAP来匹配当前访问域名是否符合MAP上的域名,返回对应的域名作为Allow-Control-Allow-Origin的值。 比方: www.baidu.com 访问的时候,匹配到了就返回Allow-Control-Allow-Origin:www.baidu.com www.qq.com 访问的时候,匹配到了就返回Allow-Control-Allow-Origin:www.qq.com
而不是直接返回多条记录。 如果是在程序里实现,你拿下当前访问域名,匹配下是否包含在你设定的域名中,如果是就增加个header返回。如果不是就不返回Allow-Control-Allow-Origin。
public function getYiiAuthCors(){ $protocol = (int)$_SERVER['SERVER_PORT'] == 80 ? 'http' : 'https'; $domain = $protocol.'//'.$_SERVER['SERVER_NAME']; $cors_allow_headers = $this->getCorsAllowHeaders(); $cors = $this->appserver_cors; $corsFilterArr = []; if (is_array($cors) && !empty($cors)) { if (isset($cors['Origin']) && $cors['Origin']) { if(stripos($domain,$cors['Origin']) === 0){ $corsFilterArr[] = 'Access-Control-Allow-Origin: ' . $cors['Origin']; } } if (isset($cors['Access-Control-Allow-Headers']) && is_array($cors['Access-Control-Allow-Headers'])) { $cors_allow_headers = array_merge($cors_allow_headers, $cors['Access-Control-Allow-Headers']); } $corsFilterArr[] = 'Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, ' . implode(', ', $cors_allow_headers); if (isset($cors['Access-Control-Allow-Methods']) && is_array($cors['Access-Control-Allow-Methods'])) { $corsFilterArr[] = 'Access-Control-Allow-Methods: ' . implode(', ',$cors['Access-Control-Allow-Methods']); } $corsFilterArr[] = 'Access-Control-Allow-Credentials: true'; } return $corsFilterArr; }
如果是HTTPS的话,需要注意$protocol的获取是否正确,如果获取不正确,建议nginx/httpd 增加下标记,程序里的判断修改下。
关联帖子:http://www.fecmall.com/topic/4367#comment14