在大公司的项目里,常见使用前后端分离,可以实现高内聚低耦合的效果。但是由于浏览器的同源策略,不同地址(端口不同也算)之间的调用就会出现跨域问题。服务端允许跨域请求可以修改代码或者修改服务器配置。如果你的项目是laravel写的接口,可以参考:
1、创建中间键
php artisan make:middleware Cros
2、修改中间键代码
<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
/**
*
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: *");
header("Access-Control-Allow-Headers: X-Requested-With,Content-Type,Access-Token");
header("Access-Control-Expose-Headers: *");
return $next($request);
}
}
3、注册中间键
在 App\Http\Kernel
类的 $middleware
属性添加:
protected $middleware = [
\App\Http\Middleware\Cors::class,
];
这个时候后端api已经允许跨域了,
使用js调用接口,查看response的header中是否有这些
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Requested-With,Content-Type,Access-Token
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
有时你会发现浏览器的network里多一次options请求,是由于浏览器要先判断该服务器是否允许该跨域请求。