最近在学习Laravel 5。
使用laravel new命令创建了一个新项目。
建了一个测试的 Controller,在/app/Http/Controllers下,完整代码:
0
));
}
public function add() {
return \Response::json(array(
'status' => 0
));
}
}
在路由配置(/routes/web.php)中添加:
Route::get('articles', 'ArticleController@list');
Route::post('articles', 'ArticleController@add');
用php artisan sereve启动服务器后,访问首页,在Chrome中打开控制台。
使用fetch API输入
fetch('/articles'),GET方法,得到正常的结果
fetch('/articles', { method: 'POST' }),得到 TokenMismatchException 的错误,Google了一下,说是跨域的问题。但我明显没有跨域;反证:如果有跨域,之前的 GET 方法也不可能会正常访问。
现在我有两个问题:
由于对后端开发不是很熟悉,我想请问一下,GET方法默认不跨域处理,POST方法默认跨域处理的原因是什么?后端开发框架为什么要默认采用这样的配置? 感觉没有理由啊。为什么不跨域的情况下POST方法也当作跨域处理了?不是应该在跨域的情况下才算跨域吗?
Laravel怎么测试POST接口?我根据这篇文章介绍的,给POST的header加上了X-CSRF-TOKEN,照常在不跨域的情况下出现POST方法跨域的现象。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
跨域的处理的原理去了解了解,了解下为什么加token!
表单中添加{{csrf_field()}},好像是laravel自己设定的表单提交验证方式,具体也没研究过。