php框架中加cors头需在响应对象设置access-control-allow-origin等字段,laravel可在中间件实现;注意*与credentials不能共存,预检请求需路由支持options,反代时需在nginx/apache配置头,跨域传cookie需精确origin、credentials: ‘include’及samesite=none+secure。
PHP 框架里怎么加 CORS 响应头
直接在响应对象上设置 Access-Control-Allow-Origin 等头部,是最常见也最可控的方式。不同框架写法略有差异,但核心逻辑一致:请求进来后、响应发出前,补上跨域所需头信息。
以 Laravel 为例,在中间件中写:
public function handle($request, Closure $next)
{
$response = $next($request);
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
return $response;
}
注意:* 和 Access-Control-Allow-Credentials: true 不能共存,若前端带 withCredentials,后端必须指定具体域名,比如 https://example.com。
为什么 OPTIONS 预检请求总是 405 或 500
浏览器对非简单请求(如带 Authorization 头、Content-Type 为 application/json)会先发一个 OPTIONS 请求。如果路由没配或控制器没处理,就直接 405(Method Not Allowed);如果中间件没放行或抛了异常,可能 500。
立即学习“PHP免费学习笔记(深入)”;