Flask接口接收含HTML代码的POST请求返回404,纯文本请求正常求原因
问题原因
你前端AJAX代码错误设置了processData: false和contentType: false,但未将数据包装为FormData对象,导致请求体格式不符合标准表单提交规范。当请求包含HTML特殊字符时,Flask底层的Werkzeug服务器无法正确解析该异常请求,最终返回404错误;而纯文本请求因无特殊字符,服务器勉强能解析到参数,所以能正常响应,这只是偶然情况。
解决方法
方法一:发送标准表单格式数据(推荐)
去掉processData和contentType这两个错误配置,jQuery会自动将对象编码为application/x-www-form-urlencoded格式,后端可正常通过request.form获取参数:
let datax = {test:'<img width="500px" src="image.png">'} $.ajax( { url: '/apix', type: 'POST', data: datax } ).done(function (data) { if (data=="OK"){ alert("OK") } else{ alert('NO'); } });
方法二:使用FormData格式提交
如果确实需要用multipart/form-data格式(比如后续要上传文件),需将数据包装为FormData对象:
let datax = new FormData(); datax.append('test', '<img width="500px" src="image.png">'); $.ajax( { url: '/apix', type: 'POST', data: datax, processData: false, contentType: false } ).done(function (data) { if (data=="OK"){ alert("OK") } else{ alert('NO'); } });
后端代码无需修改,保持原逻辑即可。
内容的提问来源于stack exchange,提问作者Saidov Sanjar
相关产品推荐
相关产品推荐

