中间件设置响应头 $request->header 没效果
前端请求有跨域问题,然后设置了群组中间件。
Route::group ( [
'domain' => "api.qipeifeixia.in",
'namespace' => 'api',
'middleware' => 'cors'
], function () {
Route::resource ( 'supplier', 'SupplierController' );
} );
测试过这个中间件是有作用到的。
然而设置了之后并没有什么用,前端请求还是提示跨域问题。
以下中间件代码
namespace App\Http\Middleware;
use Closure;
class CORS
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request)->header('Access-Control-Allow-Origin', '*')
->header("Access-Control-Max-Age", "86400")
->header('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With')
->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE, PATCH');
}
}
一看没效果,然后就去/public/index.php 文件里加了一段同样的头,就没问题了... 所以我想问,为什么写在中间件里没有生效,是哪里操作不对了吗..
下面是写在/public/index.php中的头,和中间件中的其实一样。
header('Access-Control-Allow-Origin: *');
header('Access-Control-Max-Age: 86400');
header('Access-Control-Allow-Headers: Content-Type, Accept, Authorization, X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH');
关于 LearnKu
header设置在response里面才能输出给客户端,试试直接写在中间件里面吧:
@song 不行, 各种方式都试了,还是没反应... :astonished:
经测试 我上面的代码在laravel 5.3下面能输出设置的header
@song 是版本问题吗.. 我5.0的.. 还有啥解决办法吗。
我也遇到类似的情况了
请检查自己是否使用了辅助函数
dump()或者dd(),或者通过
header()检查 header 在哪里提前发送了以上仅我遇到的情况
另外很神奇的是关掉
dump()之后,其他处理请求之后添加header的方法都管用, 就header()无效,可能是没有自动识别被继承的Response::class。不过我的问题已解决暂时不管了。我也遇到这种问题了,本地测试可以,一到线上就不行了,是我设置了
ob_clean();的原因吗?laravel 需要消息认证请求 ,默认不允许跨域请求资源,消息认证请求需要手动设置XMLHttpRequest 实例
请问你们是怎么写的啊,我版本5.5,按你上面设置了header, ajax 返回打印都是undefined,上面都获取不到
出现相同的问题,跨域都无法解决,版本5.7,用了dingo
很有可能是你的 web 服务的问题, 我之前用lumen5.4也有过这种问题, 因为nginx好像还会过滤或者重置一些header之类的
不是web的问题,是我用dingo,然后next($request)就直接跳转到下个中间件了,没有在本中间走下去。现在不知道问题出在那
试试这个
完整示例
终于找到出现同样问题的人了,是不是因为控制器里面有打印 才会那样啊
试试 barryvdh大神的laravel-cors
目前我都是用这个来了解决 跨域问题
我无效的原因是我继承的控制器里存在session 将session注释掉后 中间件配置的响应头有效 但如何让他们共存呢 就像原生php里面顶部添加缓冲ob_start()一样
楼主这个响应问题解决了吗?