CORS middleware 간단설정

Submitted by laravelfanatic - 등록 4 years ago - 수정 4 years ago

Ajax활용시 CORS설정을 해주지 않으면 브라우정에서 다른 도메인 주소로 Ajax요청을 하는것이 불가능하게 되어있다.

브라우저 정책상의 문제로 다른 매체로 링크활용시에는 아무런 문제없다.

간단한 예로 alpha.com 이란 사이트가 있으면 alpha.com/api/v1/get_something 과 같은 주소로 Ajax요청을 하는 것은 가능하지만 beta.com/api/v0/another_thing 으로 접속하려할 경우 브라우저는 에러를 내보낼것이다(Response에 아무것도 들어오지않는다.)

이를 해결하기 위해선 beta.com 에서 자신으로 부터 받은 데이터를 alpha.com 도메인에서도 사용이 가능하다고 알려줄 필요가 있다.

이에 HTTP Header에 Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Headers를 추가한다.

이에 다음과 같은 코드가 필요하다.

<?php namespace App\Http\Middleware;

use Closure;

class EnableCors {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $headers = [
            'Access-Control-Allow-Origin' =>' *',
            'Access-Control-Allow-Methods'=>' POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Headers'=>' Content-Type, Accept, Authorization, X-Requested-With'
        ];

        if($request->getMethod() == "OPTIONS") {
            return \Response::make('OK', 200, $headers);
        }

        $response = $next($request);
        foreach ($headers as $key => $value) {
            $response->header($key, $value);
        }

        return $response;
    }

}
comments powered by Disqus