使用 API 的 json POST 缺少 CORS 标头“Access-Control-Allow-Origin”

Posted

技术标签:

【中文标题】使用 API 的 json POST 缺少 CORS 标头“Access-Control-Allow-Origin”【英文标题】:CORS header ‘Access-Control-Allow-Origin’ missing for json POST using API 【发布时间】:2020-06-04 07:10:24 【问题描述】:

在 Laravel 5.8 上安装了fruitcake/laravel-cors

我的测试服务器使用 php artisan serve 在 127.0.0.1:8000 使用 routes/api.php 客户端(nuxt)在 127.0.0.1:3000 上运行

我可以使用 POSTMAN 工具向服务器发送数据

我已经配置了fruitcake/laravel-cors

protected $middleware = [
    // ...
    \Fruitcake\Cors\HandleCors::class,
];

和配置/cors.php

<?php

return [

    /*
     * You can enable CORS for 1 or multiple paths.
     * Example: ['api/*']
     */
    'paths' => [],

    /*
    * Matches the request method. `[*]` allows all methods.
    */
    'allowed_methods' => ['*'],

    /*
     * Matches the request origin. `[*]` allows all origins.
     */
    'allowed_origins' => ['*'],

    /*
     * Matches the request origin with, similar to `Request::is()`
     */
    'allowed_origins_patterns' => [],

    /*
     * Sets the Access-Control-Allow-Headers response header. `[*]` allows all headers.
     */
    'allowed_headers' => ['*'],

    /*
     * Sets the Access-Control-Expose-Headers response header.
     */
    'exposed_headers' => false,

    /*
     * Sets the Access-Control-Max-Age response header.
     */
    'max_age' => false,

    /*
     * Sets the Access-Control-Allow-Credentials header.
     */
    'supports_credentials' => false,
];

仍然得到:

访问 XMLHttpRequest 在 'http://127.0.0.1:8000/api/customerFeedbackStore' 来自原点 'http://127.0.0.1:3000' 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

在浏览器中。

【问题讨论】:

响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应? 更新配置以定义您要运行 CORS 服务的路径:'paths' =&gt; ['api/*'] 此问题已在github 上报告。好像有点复杂。 【参考方案1】:

'paths' 不能为空。您至少应该将其设置为 [ '*' ],以便它涵盖每个请求。

【讨论】:

【参考方案2】:

似乎 Cors 配置正确,但 var_dump() 和 dd() 在 return 之前触发了消息。也不返回任何东西会导致 cors 消息..

        var_dump($request);
        dd($request);

返回一个 json 响应(因为我正在使用 Json)工作正常。 (还有其他退货建议吗?)

        return response()->json([
            'data-received' => true
        ]);

【讨论】:

以上是关于使用 API 的 json POST 缺少 CORS 标头“Access-Control-Allow-Origin”的主要内容,如果未能解决你的问题,请参考以下文章

触发 API 网关端点时 COR 配置错误

API网关GET失败,出现 "缺少认证令牌"(但POST正常)。

Power Query 缺少对 Windows 身份验证和 REST API POST 正文的支持

Django CSRF 令牌错误或缺少 Ajax POST 请求

为我的 API 端点使用 POST 和 JSON

使用来自网站 API 的 POST 请求获取 Json 数据 [重复]