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