服务器端解决跨域访问

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

猜你喜欢

转载自blog.csdn.net/zzyzenith/article/details/84104527