Python 3.x 为什么使用最宽松的设置赢得';不允许请求通过?

Python 3.x 为什么使用最宽松的设置赢得';不允许请求通过?,python-3.x,flask,flask-cors,Python 3.x,Flask,Flask Cors,我正在用Flask&React开发一个web应用程序,尽管使用了Flask-CORS 所有默认值不变(允许所有标题和来源)请求 from React被拒绝,跨源请求被阻止:同源策略不允许读取远程资源http://localhost:5000/auth/check_passport. (原因:CORS请求未成功)。 烧瓶: from flask_cors import CORS def create_app(script_info=None): app = Flask(__name__)

我正在用Flask&React开发一个web应用程序,尽管使用了Flask-CORS 所有默认值不变(允许所有标题和来源)请求 from React被拒绝,跨源请求被阻止:同源策略不允许读取远程资源http://localhost:5000/auth/check_passport. (原因:CORS请求未成功)。

烧瓶:

from flask_cors import CORS

def create_app(script_info=None):
    app = Flask(__name__)
    app.config.from_object(current_config)
    from project.api.auth import auth_blueprint
    app.register_blueprint(auth_blueprint)

    CORS(app)

    return app
在终端中,我可以看到它进入了烧瓶状态:
127.0.0.1---[20/Apr/2021 10:36:59]“POST/auth/check\u passport HTTP/1.1”200

根据docs的说法,将CORS保留在默认状态允许任何客户端到达端点

非常感谢您的反馈

编辑:

auth.py:

from flask import Blueprint, request

auth_blueprint = Blueprint('auth', __name__, url_prefix='/auth')

@auth_blueprint.route('/check_passport', methods=['POST'])
def check_passport():
    print('called')  # isn't being printed out
    image_received = request.data['image']
    ...
    ...
前端:

const checkPassport = () => {
    if (passportFile) {
      const fd = new FormData();
      fd.append("image", passportFile, passportFile.name);
      const url = "http://localhost:5000/auth/check_passport";
      const config = {
        headers: {
          "Content-Type": "multipart/form-data"
        }
      };
      axios
        .post(url, fd, config)
        .then(resp => {
          console.log(resp.data.message);
          console.log(resp.data.content);
        })
        .catch(e => {
          console.log(e);
        });
    }
  };

起初我认为这可能与你使用蓝图有关,但不,我不能重现这个问题。以下是我的设置:

from flask_cors import CORS
from flask import Flask, Blueprint, jsonify

auth = Blueprint('auth', __name__)

@auth.route('/check_passport')
def check_passport():
    return jsonify(dict(message='Check passport'))

app = Flask(__name__)
app.register_blueprint(auth, url_prefix='/auth')
CORS(app). # comment out to see cors error
我用这个向端点发出请求的简单页面来测试它:(只需将它拖到浏览器窗口中并观察控制台)


Cors检查
var url='1〕http://127.0.0.1:5000/auth/check_passport';
//取回
fetch(url).then(resp=>resp.json()).then(data=>{
console.log('SUCCESS')
console.log(数据)
})
//或axios
获取(url)。然后(响应=>{
console.log('SUCCESS',response.data);
})

我可以看到它在
CORS(app)
上运行得很好,但没有它就不行了。

我使用的是
axios
,它发送基于承诺的请求,但这不重要。@Mark you's right-它不重要。在这里,我添加了一个使用axios请求的示例,我将发布到端点。请看一下我对我的问题所做的编辑。我将一个
打印('called')
放在烧瓶路由中,以查看路由是否被触发,并且我在终端中没有得到任何东西,因此有东西阻止了路由。当我明确指定要作为数据发送的负载时,请求就开始通过:
axios.post(url,{data:fd},config)。然后(resp=>{
我认为它默认作为
data
发送。
<!DOCTYPE html>
<html>
    <head>
        <title>Cors Check</title>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.1/axios.min.js"></script>
        <script type='text/javascript'>
            var url = 'http://127.0.0.1:5000/auth/check_passport';

            // fetch
            fetch(url).then(resp => resp.json()).then(data => {
                console.log('SUCCESS')
                console.log(data)
            })
            
            // or axios
            axios.get(url).then(response => {
                console.log('SUCCESS', response.data);
            })
        </script>
    </head>

<body></body>
</html>