我用flask-restplus制造了API服务器。
还使用cors模块来避免CSP问题。
前端是React.js。
我的代码在这里。
class ArticleList(Resource):
def post(self):
print(1)
return {"status":"true", "result":"article write success"}, 200
React.js代码在这里。
_writeArticle = () => {
const { title, body, tags, password } = this.state;
const data = {title: title, body: body, tags: tags, password: password};
fetch("http://127.0.0.1:5000/article/", {
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json"
},
body: data
})
.then(res => {
if(res.status === 200) {
return <Redirect to='/' />
} else {
alert("error");
}
})
.catch(err => console.log(err))
}
我为POST
定义了方法。但是,它使用OPTIONS
方法请求。
在Google中搜索后,该问题由CORS引起。
所以我像这样在主代码中定义了cors。
from flask import Flask
from flask_restplus import Api, Resource
from api.board import ArticleList, Article
from flask_restplus import cors
app = Flask(__name__)
api = Api(app)
api.decorators=[cors.crossdomain(origin='*')]
api.add_resource(ArticleList, '/article')
api.add_resource(Article, '/article/<int:article_no>')
if __name__ == '__main__':
app.run(debug=True)
但是它仍然要求OPTIONS
。
我该如何解决这个问题?
答案 0 :(得分:3)
该OPTIONS
请求被称为pre-flight request
。
在与CORS
有关的某些情况下,网络浏览器会首先向服务器发送pre-flight request
,以检查您的域是否被允许向服务器发出请求。如果服务器说yes
,那么您的实际POST
请求将被发送。否则,将不会发送其他任何请求,并且网络浏览器会向您吐出错误。
以下是pre-flight request
上的文档:
https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1#preflight-requests
根据文档:
飞行前请求使用HTTP OPTIONS方法。