Php 为什么CORS在某些地方起作用,但在其他地方却不起作用?
在我的Laravel应用程序中,我已经设置了一条全天候路线来处理CORS的飞行前请求Php 为什么CORS在某些地方起作用,但在其他地方却不起作用?,php,laravel,cors,Php,Laravel,Cors,在我的Laravel应用程序中,我已经设置了一条全天候路线来处理CORS的飞行前请求 Route::options('/{any}', 'v1\ApiController@handleCors')->where('any', '.*'); 这将转到执行以下操作的函数: return response() ->json($data, $this->statusCode) ->header('Accept', '*/*')
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对话时,它将抛出相同的错误。我做错了什么?我认为CORS头通常应用于应用程序实例,而不是响应
//在应用程序中设置CORS头
标题('Access-Control-Request-Headers','X-Request-With,content-type');
标题('Access-Control-Allow-Origin','https://frontend.myapp.com');
标题('Access-Control-Allow-Methods'、'GET、POST、DELETE、PUT、OPTIONS');
//正常返回响应
return response()->json($data$this->statusCode);
总体思路应该是正确的。尝试将您的标题更改为我在上面更新的答案。我刚才把你的标题抄了一遍,以供参考。