V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jayan2358
V2EX  ›  Flask

浏览器使用 jQuery Ajax 获取服务端数据报 Provisional headers are shown 错误?

  •  
  •   jayan2358 · 2018-07-17 19:18:45 +08:00 · 3764 次点击
    这是一个创建于 2082 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述

    初学 Flask 框架后尝试做一个练手项目,功能是通过收集使用网络上公开的哈希解密 API 来获取明文 通过 jQuery.get() 获取服务端数据时发现返回的数据大小为 0 字节,而把 URL 直接通过浏览器打开响应却是正常的。

    问题出现的环境背景及自己尝试过哪些方法

    Google 了一圈试了一圈没解决问题,好多人说跨域,可是这肯定是一个域名下的啊,解决方法众说纷纭,感觉一脸懵逼。 其实一模一样的功能我用 Laravel 以前实现过,那时候写的也蛮顺的,所以考虑是写后端代码时出了问题(仅猜测),emmm 好像以前 Ajax 我是用原生 JS 写的,不记得了。

    相关代码

    main.py (Flask)

    import requests
    from flask import Flask, request, render_template
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        return render_template('index.html')
    
    
    @app.route('/decrypt')
    def decrypt():
        payload = {'hash': request.args.get('hash'), 'hash_type': 'md5', 'email': '[email protected]',
                   'code': '1vds464vxc61v'}
        r = requests.get('http://md5decrypt.net/en/Api/api.php', params=payload)
        return r.text
    
    
    if __name__ == '__main__':
        app.run()
    
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>CHash</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css">
    </head>
    <body>
    <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
        <a class="navbar-brand" href="#">CHash</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarCollapse">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home</a>
                </li>
            </ul>
            <form class="form-inline mt-2 mt-md-0">
                <input id="hash" name="hash" class="form-control mr-sm-2" type="text" placeholder="Enter Hash">
                <button id="decrypt" class="btn btn-outline-success my-2 my-sm-0">Decrypt</button>
            </form>
        </div>
    </nav>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1/dist/umd/popper.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js"></script>
    <script src="../static/main.js"></script>
    </body>
    </html>
    

    static/main.js

    $("#decrypt").click(function () {
            $.get("/decrypt", {hash: $("#hash").val()}, function (data) {
                alert(data);
            })
        }
    );
    

    你期待的结果是什么?实际看到的错误信息又是什么?

    萌新求教,麻烦各位大佬了,希望给出解决方法的同时简要说明一下报错的原因 Chrome DevTools 抓包 Ajax 请求报了一个 Provisional headers are shown 错误,截图如下,Response 是空的,所以不截了 图片描述

    5 条回复    2018-07-17 20:26:12 +08:00
    shintendo
        1
    shintendo  
       2018-07-17 20:10:18 +08:00   ❤️ 1
    建议:这种问题可以尝试换个浏览器,看会不会报出不同的错误信息来(甚至可能顺利执行)。
    shintendo
        2
    shintendo  
       2018-07-17 20:14:08 +08:00   ❤️ 1
    啊,我看出来了,你那个 button 放在 form 里面,默认是 submit 的,点击的同时会触发表单提交,你给设个 type=button 试试
    jayan2358
        3
    jayan2358  
    OP
       2018-07-17 20:20:18 +08:00
    @shintendo 用 IE11 试了下反应一模一样
    ![error]( https://imgchr.com/i/PlWCjO)
    jayan2358
        4
    jayan2358  
    OP
       2018-07-17 20:23:28 +08:00
    @shintendo
    我试试看
    jayan2358
        5
    jayan2358  
    OP
       2018-07-17 20:26:12 +08:00
    @shintendo 成功了谢谢大佬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2650 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:18 · PVG 23:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.