为XMLHttpRequest设置引用来源?

11

我成功地通过以下方式发送一个XMLHttpRequest:

var createCORSRequest = function(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // Most browsers.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // IE8 & IE9
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // CORS not supported.
    xhr = null;
  }
  return xhr;
};

var url = 'http://www.whatismyip.com';
var method = 'GET';
var xhr = createCORSRequest(method, url);

xhr.onload = function() {
  // Success code goes here.
};

xhr.onerror = function() {
  // Error code goes here.
};


xhr.setRequestHeader('referer', 'http://www.google.com');
xhr.send();

然而,我无法定义我的referer。添加自定义referer的正确方法是什么?


我有同样的问题,不明白为什么XMLHttpRequest没有referrer或User-Agent信息?是否有任何方法可以使用fetch或axios来捕获它们全部? - efirat
3个回答

19
您无法修改referer头。根据XMLHttpRequest规范的规定,禁止更改referer头(这可以防止某些网站通过伪造referer绕过安全检查)。

如果请求头与以下标头之一匹配,则终止这些步骤:

  • ...
  • Referer
  • ...

3
你可以尝试像这样做:
xhr.setRequestHeader('X-Referer', window.location.href);

然后阅读这个自定义的X-Referer标头。


-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接