我正在尝试向公共 API 发出 GET 请求,但是,我得到 No 'Access-Control-Allow-Origin' header is present on the requested re

Posted

技术标签:

【中文标题】我正在尝试向公共 API 发出 GET 请求,但是,我得到 No \'Access-Control-Allow-Origin\' header is present on the requested resource【英文标题】:I'm trying to make a GET request to a public API, however, I get No 'Access-Control-Allow-Origin' header is present on the requested resource我正在尝试向公共 API 发出 GET 请求,但是,我得到 No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2019-10-16 05:22:26 【问题描述】:

我刚刚创建了一个新项目并制作了一条路线:

Route::get('/getSummoner', 'RiotController@getSummoner');

执行这个函数:

public function getSummoner()

$get = file_get_contents("https://na1.api.riotgames.com/lol/summoner/v4/summoners/by-name/RiotSchmick?api_key=");
$result = json_decode($get);

return response()->json([
    'result' => $result,
], 201);


在前端,我收到以下错误:

Access to XMLHttpRequest at 'url' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我了解当我向与我的页面所在的域不同的域发出请求时会发生这种情况,但由于 API 不是我的,我无法从同一个域发出请求,不是吗?

【问题讨论】:

How does Access-Control-Allow-Origin header work? 【参考方案1】:

该消息表明他们的 API 不允许您的网站访问它。它可能允许您通过 Postman 访问它、通过 URL 直接访问站点或其他一些直接方法……但是您需要 Access-Control-Allow-Origin 标头来专门允许您的 Web 域(在这种情况下似乎是您的内部)以便能够访问它。

【讨论】:

【参考方案2】:

出于安全目的,默认情况下在任何站点中都禁用了 CORS。您需要安装 barryvdh/laravel-cors 以允许 CORS。

composer require barryvdh/laravel-cors

安装后,您需要在终端/命令提示符下运行它

php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"

然后将 HandleCors 添加到您的中间件组中,在您的情况下将其添加到 api 中间件中

    protected $middlewareGroups = [
    'web' => [
       // ...
    ],

    'api' => [
        // ...
        \Barryvdh\Cors\HandleCors::class,
    ],
];

【讨论】:

以上是关于我正在尝试向公共 API 发出 GET 请求,但是,我得到 No 'Access-Control-Allow-Origin' header is present on the requested re的主要内容,如果未能解决你的问题,请参考以下文章

向 Azure Blob 存储发出 GET 请求时授权失败 [REST API][Azure Blob 存储]

发出 JSON RPC API 的 GET 请求而不是 POST 请求

向 Spotify API 发出 PUT 请求时出现 401 错误

错误:使用 Fetch API 向第三方 API 发出 GET 请求时出现“TypeError:无法获取”

使用 swift 4 发出 GET 请求在游乐场中有效,但在项目中无效

访问 MailChimp API 3.0 (GET)