【发布时间】:2020-01-12 15:23:10
【问题描述】:
我在 Laravel 中为我的项目创建了一个自定义中间件。它添加了以下标题:
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With')
->header('Access-Control-Allow-Credentials',' true');
中间件似乎适用于 Postman。当我通过 Postman 触发 POST 请求时,您会注意到标头已添加到响应中:
但是,对于 Chrome,这似乎不起作用。查看从 Google Chrome 返回的标头(相同的请求,使用 axios 进行调用):
这会导致 Google Chrome 控制台出现以下错误:
从源“http://localhost:3000”对“http://127.0.0.1:8000/auth/jwt/token”处的 XMLHttpRequest 的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。
我做错了什么/导致了这个奇怪的问题?
【问题讨论】:
-
Access-Control-Allow-Credentials和 wilcarded 来源不兼容。 -
Postman 不受同源政策约束,因此不需要发出飞行前
OPTIONS请求,因此您的请求绝对不一样
标签: javascript php laravel axios