Chrome 65 - 无法从本地文件向Flask发出POST请求

时间:2018-03-13 12:37:47

标签: ajax google-chrome post flask cors

我正在运行以下代码:

from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/test', methods=['POST'])
def test():
    return jsonify({'result': 'hello'}), 201

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

尝试打开以下页面时,出现错误消息:

  

' Access-Control-Allow-Origin'标头的值为' null'那是   不等于提供的原产地。起源' null'因此不是   允许访问。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
</head>
<body>
<script>
  function func() {
    $.ajax({
      url: "http://0.0.0.0:5000/test",
      method: "POST",
      contentType: "application/json"
    });
  }
  window.onload = func
</script>
</body>
</html>

这不适用于Chrome 64.有谁知道这是为什么?

2 个答案:

答案 0 :(得分:1)

不需要在Web服务器中安装本地文件的替代解决方案可以通过CORS允许跨源来完成。 (如果您需要多个本地文件,则很有用 - 例如链接javascript / css文件)。

只需更换一行:

  

CORS(APP)

通过

  

CORS(app,send_wildcard = True)

有关详细信息,请参阅CORS API doc

答案 1 :(得分:0)

我猜你正在浏览file://域上的测试页面(而不是通过HTTP) - file://资源对CORS的支持有限。

如果您在Web服务器上浏览测试页,则CORS按预期工作。例如,您可以运行这样的命令来启动一个简单的PHP Web服务器:

php -S localhost:5001 ./test.html

然后通过网址http://localhost:5001/

访问该页面