关于跨域发送post请求

1.接口用Python Flask RestFul开发的接口,初始化App的时候添加了cors的设置
,然后再微信开发者工具(就是小程序开发工具)中调试可以跨域请求回结果来,
问题是:将连接发送到手机端打开就请求不到数据

2.代码如下
后端接口的cors配置如下

app = Flask(__name__)
CORS(app, supports_credentials=True)
api = Api(app)

前端请求如下

        var xmlhttp;
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
        } else { 
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var jsonString = xmlhttp.responseText;
        var objc = JSON.parse(jsonString);
        var json_objc1 = objc['Data']
        document.getElementById("showNumber").innerHTML = "号码:" + json_objc1['name_id'] + "<br/>" + "姓名:" +json_objc1['name'];
        document.getElementById("button").innerHTML = "修改简介";
        suessFlag = 1;
        } else {
        alert(xmlhttp.status)
        }
        //就是这里的端口和本身网站的IP是一样的,端口不同,这种跨域
        var url_3 = 'https://域名:端口/getInfo
        xmlhttp.open("POST", url_3, true);
        xmlhttp.setRequestHeader('Access-Control-Allow-Origin', '*')
        xmlhttp.setRequestHeader("access-control-allow-credentials", "true")
        xmlhttp.setRequestHeader("Content-type", "application/json")
        xmlhttp.send(JSON.stringify(temp));

然后把xmlhttp.status的状态码打印出来,发现状态码是0,百度出来0代表还未初始化,初始化失败

所以想问下这是什么原因哪里的参数不对

参考GPT和自己的思路:

根据你提供的代码和情况,我认为可能是由于以下几个原因导致的:

  1. 在前端请求中,设置了请求的头部信息,但是此信息应该在服务端设置,所以可以将第22行和第23行代码移除,并且在服务端添加相应的头部信息:
CORS(app, supports_credentials=True, origins='*', allow_headers=["Content-Type", "Authorization", "Access-Control-Allow-Credentials"])

这样,服务端返回的响应头中就会带有 Access-Control-Allow-CredentialsAccess-Control-Allow-Origin 这两个信息。

  1. 在前端请求中,第20行代码中的 https://域名:端口/getInfo 需要替换为真实的 URL,如果 URL 不正确,则会导致请求失败。

  2. 在前端请求中,应该将第19行代码挪到前面,先设置好请求方式和 URL,再去设置请求头和发送请求:

var url_3 = 'https://域名:端口/getInfo';
xmlhttp.open("POST", url_3, true);
xmlhttp.setRequestHeader("Content-type", "application/json");
xmlhttp.send(JSON.stringify(temp));
  1. 如果仍然存在问题,可以使用 Chrome 浏览器的开发者工具在 Network 标签中查看请求和响应的详细信息,可能会有更加具体的错误提示。