POST 消息到后台一直提示 400 BAD request - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skywatcher
V2EX    Flask

POST 消息到后台一直提示 400 BAD request

  •  
  •   skywatcher 2015-11-20 02:01:06 +08:00 5723 次点击
    这是一个创建于 3614 天前的主题,其中的信息可能已经有所发展或是发生改变。
    $.ajax({ url: "/profile/{{ g.user.user_id }}", type: 'POST', data: {data: "failed"}, error: function(e) { console.log(e); } }) .done(function (data) { console.log(data); }); 

    后台只能收到 GET 消息,无法收到 POST 消息,但是其他页面同样的方式实现的没问题。

    实在不知道什么原因,求教!!!

    第 1 条附言    2015-11-20 09:20:19 +08:00
    哎,自己挖的坑,果然要自己填;

    > 之前后台为了安全性,开启了 CRSF(Cross Site Request Forgery),而该页面中发送请求时并未对此进行验证。

    *自己 SX 了,一直检查不出来,一个是开始在手机端,不好调试(暂时推荐: http://jsconsole.com/?%3Alisten ), ajax 的 post 错误了没反馈信息,只知道 400 ban request ,所以一直没找到问题所在。*


    具体参看:
    http://flask-wtf.readthedocs.org/en/latest/csrf.html
    12 条回复    2015-11-20 09:51:41 +08:00
    HanSonJ
        1
    HanSonJ  
       2015-11-20 02:31:49 +08:00
    可能与框架有关,有些框架防止跨域
    FrankFang128
        2
    FrankFang128  
       2015-11-20 03:03:04 +08:00
    因为后台不接受 post
    ryd994
        3
    ryd994  
       2015-11-20 04:43:33 +08:00
    后台开 debug 看 log
    skywatcher
        4
    skywatcher  
    OP
       2015-11-20 08:36:50 +08:00
    @FrankFang128 应该不是,另一个页面的 post 正常的
    skywatcher
        5
    skywatcher  
    OP
       2015-11-20 08:43:18 +08:00
    @HanSonJ 看 url 就知道没有跨域啊
    skywatcher
        6
    skywatcher  
    OP
       2015-11-20 08:47:36 +08:00
    @ryd994 flask 的后台如何看 log , log 不是自己写的么?目前 post 消息根本就没到后台

    这是后端代码
    ```
    @app.route('/profile/<int:user_id>', methods=['GET', 'POST'])
    @login_required
    def profile(user_id):
    if request.method == 'POST':
    print request.method
    data = request.form.get('data')
    return data
    ```
    realpg
        7
    realpg  
    PRO
       2015-11-20 08:55:04 +08:00
    CHROME F12
    网络
    然后发起请求,把返回 400 那个 POST 请求上,右键, SAVE AS HAR 然后贴上来
    realpg
        8
    realpg  
    PRO
       2015-11-20 08:55:30 +08:00
    更正 COPY ALL AS HAR 不是 SAVE
    zeayes
        9
    zeayes  
       2015-11-20 09:01:15 +08:00
    login_required 里面的处理有问题。

    把进程跑在前台,打开 debug 模式,标准输入会打印每个请求的。
    skywatcher
        10
    skywatcher  
    OP
       2015-11-20 09:27:58 +08:00
    @realpg 问题已解决,开启 CSRF 而没有在 header 里加相关信息 /(ㄒoㄒ)/~~
    skywatcher
        11
    skywatcher  
    OP
       2015-11-20 09:28:12 +08:00
    @zeayes 问题已解决
    HanSonJ
        12
    HanSonJ  
       2015-11-20 09:51:41 +08:00
    @skywatcher 其实我想说的就是楼主说的 CRSF ,昨晚没想到这个英文怎么写 - -
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     869 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:26 PVG 04:26 LAX 13:26 JFK 16:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86