跨域问题 php 解决办法
原创
©著作权归作者所有:来自51CTO博客作者济南极梦的原创作品,请联系作者获取转载授权,否则将追究法律责任
在做项目的过程中经常需要跨域访问。这里主要介绍一下 PHP 中怎么解决跨域问题。
1、 在php文档头部
1.1、允许所有域名访问
header('Access-Control-Allow-Origin: *');
1.2、允许单个域名访问
header('Access-Control-Allow-Origin: https://test.com');
1.3、允许多个域名访问
在实际项目中最好指定能跨域访问的域名,增加安全性。可以写在一个公共类里面,封装一个方法调用。
// 设置能访问的域名
static public $originarr = [
'https://test1.com',
'https://test2.com',
];
/**
* 公共方法调用
*/
static public function setheader()
{
// 获取当前跨域域名
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (in_array($origin, self::$originarr)) {
// 允许 $originarr 数组内的 域名跨域访问
header('Access-Control-Allow-Origin:' . $origin);
// 响应类型
header('Access-Control-Allow-Methods:POST,GET');
// 带 cookie 的跨域访问
header('Access-Control-Allow-Credentials: true');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
}
}
或者是
// 允许 $originarr 数组内的 域名跨域访问
header('Access-Control-Allow-Origin: *' );
// 响应类型
header('Access-Control-Allow-Methods:POST,GET');
// 带 cookie 的跨域访问
header('Access-Control-Allow-Credentials: true');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
2、js请求时用jsonp
3、vue正式请求前会模拟请求一边接口,第一遍接口没有任何参数(包括token)
系统报错的400、403或者500导致vue无法进行第二次正式访问
4、使用反向代理映射到同一个域名下面