javascript中跨域的http post请求

Posted

技术标签:

【中文标题】javascript中跨域的http post请求【英文标题】:http post request with cross-origin in javascript 【发布时间】:2012-01-04 02:38:41 【问题描述】:

我在 Firefox 中的 http post 调用有问题。我知道当存在跨域时,firefox 首先在 POST 之前执行 OPTIONS 以了解 access-control-allow 标头。 使用此代码我没有任何问题:

Net.requestSpeech.prototype.post = function(url, data) 
    if(this.xhr != null) 
        this.xhr.open("POST", url);
        this.xhr.onreadystatechange = Net.requestSpeech.eventFunction;
        this.xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        this.xhr.send(data);
    

我使用调用此函数的简单 html 测试此代码。 一切正常,我得到了 OPTIONS 和 POST 的响应,我处理了响应。但是,我正在尝试将此代码与使用 jquery 的现有应用程序集成(我不知道这是否是一个问题),当在这种情况下执行 send(data) 时,浏览器(firefox)也会这样做,首先做一个 OPTION 请求,但在这种情况下不会收到服务器的响应并将此消息放入控制台:

[18:48:13.529] OPTIONS http://localhost:8111/ [undefined 31ms]

未定义...未定义是因为没有收到响应,但是代码是一样的,我不知道为什么在这种情况下选项没有收到响应,有人知道吗?

我调试了我的服务器应用程序,并且 OPTIONS 可以正常到达服务器,但浏览器似乎没有等待响应。

稍后编辑:好的,我认为问题是当我使用带有 SCRIPT 标记的简单 html 运行时,该标记调用执行请求的方法运行正常,但是在这个没有收到响应的应用程序中,我有一个表单执行 onsubmit 事件,我认为提交事件返回非常快,浏览器没有时间获取 OPTIONS 请求。

稍后再编辑:WTF,我解决了问题,使 POST 请求同步:

this.xhr.open("POST", url, false);

提交响应很快,迫不及待浏览器的OPTION响应,你知道吗?

【问题讨论】:

【参考方案1】:

由于同源政策,您不能发送跨域帖子, 您可以通过在 iframe 中包含站点(如果可以访问该域)来解决此问题,原始站点包含外部站点的 iframe,内部方向是合法的。

【讨论】:

以上是关于javascript中跨域的http post请求的主要内容,如果未能解决你的问题,请参考以下文章

Vue项目中跨域问题的解决

如何用CORS来解决JS中跨域的问题

多种解决react中跨域问题方案

多种解决react中跨域问题方案

JS常用的7中跨域方式总结

vue+springboot前后端分离工程中跨域问题的解决