跨域是页面js请求ajax,js所在html的url与请求api,不在同一个域名下,跨域解决的思路。
1、服务器端响应头允许请求的url,即响应输出允许访问的域名;
2、请求由服务器转发,使用网关或者nginx对请求进行重定向。
具体方案:
1、php
在responce的header中输出
下面是laravel的修改方法,首先定义一个 Cors 类,然后在Kernel中的中间件配置中加入这个类。
namespace Uas\Http\Middleware;
use Closure;
class Cors
{
/**
* Create a new middleware instance.
*
* @param \Illuminate\Contracts\Auth\Factory $auth
*/
public function __construct()
{
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
*
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, HEAD, POST, PUT, DELETE', 'OPTIONS',
'Access-Control-Allow-Credentials' => 'false',
'Access-Control-Max-Age' => '60',
'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
];
if ($request->isMethod('OPTIONS')) {
return response(null, 200, $headers);
}
$response = $next($request);
foreach ($headers as $key => $value) {
$response->header($key, $value);
}
return $response;
}
}
protected $middlewareGroups = [
'web' => [
\Uas\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Uas\Http\Middleware\Cors::class,
],
];
2、springboot