【问题标题】:Why does CORS work in some places, but not in others?为什么 CORS 在某些地方有效,而在其他地方无效?
【发布时间】:2020-02-23 21:25:09
【问题描述】:

在我的 Laravel 应用程序中,我设置了一条捕获所有路由来处理 CORS 预检请求。

Route::options('/{any}', 'v1\ApiController@handleCors')->where('any', '.*');

这转到执行此操作的函数:

return response()
            ->json($data, $this->statusCode)
            ->header('Accept', '*/*')
            ->header('Access-Control-Request-Headers', 'Content-Type, Authorization')
            ->header('Access-Control-Allow-Origin', 'https://frontend.myapp.com')
            ->header('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT, OPTIONS');

现在,当我使用 OPTIONS 请求调用路由时,我会取回所有标头。然后我在终端中运行了以下命令:

curl -i -X OPTIONS -H "Origin: https://frontend.myapp.com" \
-H 'Access-Control-Request-Method: POST' \
-H 'Access-Control-Request-Headers: Content-Type, Authorization' \
"https://api.myapp.com/testingcors"

我收到以下回复:

HTTP/1.1 403 Forbidden
Server: nginx
Date: Mon, 28 Oct 2019 15:29:48 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.3.10
Cache-Control: no-cache, private

Origin not allowed%

当我让实际的前端与 API 对话时,它会抛出同样的错误。我在这里做错了什么?

【问题讨论】:

    标签: php laravel cors


    【解决方案1】:

    我相信 CORS 标头通常应用于应用实例,而不是响应。

    // set the CORS headers in your app
    header('Access-Control-Request-Headers', 'X-Requested-With,content-type');
    header('Access-Control-Allow-Origin', 'https://frontend.myapp.com');
    header('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT, OPTIONS');
    
    // return a response normally
    return response()->json($data, $this->statusCode);
    

    【讨论】:

    • 大体思路应该是正确的。尝试将您的标题更改为我已更新上述答案的内容。我刚刚直接复制了您的标题以供参考。
    猜你喜欢
    • 2011-03-21
    • 2017-04-05
    • 1970-01-01
    • 2015-12-21
    • 2019-12-27
    • 1970-01-01
    • 2015-09-12
    • 2021-09-17
    相关资源
    最近更新 更多