1. 程式人生 > >伺服器端解決跨域訪問

伺服器端解決跨域訪問

跨域是頁面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