当我实际上没有对连续的相同请求使用请求正文时,我收到 405 错误。
Example:
app = Flask(__name__)
CORS(app)
@app.route("/login", methods=["POST"])
def login():
return jsonify({'success': True})
请求正文非常简单:
{'username': 'foo', 'password': 'bar'}
Flutter代码生成请求:
http.Response response = await http.post(
Uri.parse("http://127.0.0.1:5000/login"),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'username': username,
'password': username,
}),
);
术语输出:
127.0.0.1 - - [10/May/2022 05:37:36] "OPTIONS /login HTTP/1.1" 200 -
127.0.0.1 - - [10/May/2022 05:37:36] "POST /login HTTP/1.1" 200 -
127.0.0.1 - - [10/May/2022 05:37:41] "{"username":"foo","password":"bar"}POST /login HTTP/1.1" 405 -
127.0.0.1 - - [10/May/2022 05:37:55] "{"username":"foo","password":"bar"}OPTIONS /login HTTP/1.1" 405 -
这大大简化了,但足以产生预期的错误。
但是,此 Flask 代码不会生成相同的错误:
@app.route("/login", methods=["POST"])
def login():
print(request.json['username'])
return jsonify({'success': True})
和术语输出:
127.0.0.1 - - [10/May/2022 05:58:54] "POST /login HTTP/1.1" 200 -
127.0.0.1 - - [10/May/2022 06:08:16] "OPTIONS /login HTTP/1.1" 200 -
foo
127.0.0.1 - - [10/May/2022 06:08:16] "POST /login HTTP/1.1" 200 -
foo
127.0.0.1 - - [10/May/2022 06:08:16] "POST /login HTTP/1.1" 200 -
foo
我意识到这是一个愚蠢的场景,因为你什么时候不会真正使用这些数据?我只是在修补时遇到了这个问题,花了一个小时才弄清楚为什么会抛出错误。
我的问题是:为什么它会抛出 405 错误,实际的区别是什么?如果您不访问数据,数据在请求之间是否仍然存在?这是预期的功能吗?是否有涵盖此功能的文档?