php - Laravel5 使用 fetch API 进行 ajax 的POST访问出现 TokenMismatchException
ringa_lee
ringa_lee 2017-04-11 09:55:43
[PHP讨论组]

最近在学习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输入

  1. fetch('/articles'),GET方法,得到正常的结果

  2. fetch('/articles', { method: 'POST' }),得到 TokenMismatchException 的错误,Google了一下,说是跨域的问题。但我明显没有跨域;反证:如果有跨域,之前的 GET 方法也不可能会正常访问。

现在我有两个问题:

  1. 由于对后端开发不是很熟悉,我想请问一下,GET方法默认不跨域处理,POST方法默认跨域处理的原因是什么?后端开发框架为什么要默认采用这样的配置? 感觉没有理由啊。为什么不跨域的情况下POST方法也当作跨域处理了?不是应该在跨域的情况下才算跨域吗?

  2. Laravel怎么测试POST接口?我根据这篇文章介绍的,给POST的header加上了X-CSRF-TOKEN,照常在不跨域的情况下出现POST方法跨域的现象。

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
伊谢尔伦

跨域的处理的原理去了解了解,了解下为什么加token!

巴扎黑

表单中添加{{csrf_field()}},好像是laravel自己设定的表单提交验证方式,具体也没研究过。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号