跨域请求被阻止在发送发布请求时

时间:2018-12-03 13:24:56

标签: javascript xmlhttprequest

我有2台服务器和2个域,我想将发布请求从一个域发送到另一个域,但是我的浏览器显示错误

  

从原点“ https://example.com”开始对“ https://www.example2.com”处的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:“访问控制”的值当请求的凭据模式为“包括”时,响应中的“允许-起源”标头不得为通配符“ *”。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。

我用于发送帖子数据的javascript代码是

<script>
var data = JSON.stringify({
  "key": "value sent"
});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});
xhr.open("POST", "https://example.com");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
</script>

所以我的问题是如何解决此问题并将邮寄请求发送到另一个域以及使用哪种方法发送邮寄请求

2 个答案:

答案 0 :(得分:3)

您只需将Access-Control-Allow-Origin从通配符更改为https://www.example2.com即可解决此问题。

  

访问控制允许来源:https://www.example2.com

此CORS跨域请求是网站用来防止使用JavaScript进行未经授权的访问的安全性,添加标头将解决此问题。

答案 1 :(得分:0)

您需要在服务器上启用CORS。如果是NodJ,您可以执行以下操作:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.post('/', function(req, res, next) {
  // request from other domain will work here
});

在浏览器中使用

function createCORSRequest(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    xhr = null;
  }
  return xhr;
}