我有哪些选项可以避免跨域请求被阻止?

What are my options to avoid a Cross Origin Request being blocked?

提问人:RJones 提问时间:9/11/2017 最后编辑:CommunityRJones 更新时间:9/11/2017 访问量:3003

问:

情况:

我想在渲染之前调用 --> Food Hygiene API 并操作结果。

我相信我可以在单页 Web 应用程序中用 Javascript 编写这个客户端,从而避免了对全栈应用程序的需求。

我遇到了“跨域请求被阻止”,随后发现了 CORS 遵循的同源策略

我随后尝试:

包含此代码的 CORS 请求(来自此源):

$( document ).ready(function() {
  const ul = document.getElementById('authorities');
  const url = 'http://ratings.food.gov.uk/authorities/json'

  function createCORSRequest(method, url) {
    var xhr = new XMLHttpRequest();
      xhr.open(method, url, true);
      return xhr;
  }

  var xhr = createCORSRequest('GET', url);

  xhr.onload = function() {
    var responseText = xhr.responseText;
    console.log(responseText);
  }

  xhr.onerror = function() {
    console.log("there was an error!");
  }

  xhr.send();  
});                                                                     

使用 JSONP 的 jQuery 调用(该调用会出错,并且不会从目标返回 responseText):

function getData() {
    $.ajax({
      type: "GET",
      url: 'http://ratings.food.gov.uk/authorities/json',
      accept: "text/json",
      async:true,
      contentType: 'text/plain',
      dataType : 'jsonp',   
      crossDomain:true,
      xhrFields: {
        withCredentials: false
      },
      success: function(json) {
        alert("Success");
        console.log(json);
      },
      error: function(data) {
        alert("Error");
      },
    });
  }

据我所知,目标 api 不支持 CORS,因为 HTTP 响应在 vanilla 和 jQuery 示例中都推送到 。xhrerror

已在本地“解决”了此 Chrome 扩展程序的问题,但我认为它不会为克隆存储库或使用该页面(例如托管在 Heroku 上)的用户解决问题。

从这里我有什么选择?

JavaScript 安全 浏览器 CORS 客户端

评论

1赞 Jaromanda X 9/11/2017
仅当您无法控制服务器时才有一个选项......通过您自己的服务器代理请求
0赞 Mr. Reddy 9/11/2017
我想到的一件事是,在发送 XMLHttpRequest 引用之前,尝试将 .withCredentials 属性设置为 true:html5rocks.com/en/tutorials/cors
0赞 RJones 9/11/2017
是的,试过了,但无济于事,史密斯先生:/
0赞 sideshowbarker 8/31/2018
你可以这样做:...它会起作用的。有关说明,请参阅 如何使用 CORS 代理绕过 stackoverflow.com/questions/43871637/...const url = 'https://cors-anywhere.herokuapp.com/ http://ratings.food.gov.uk/authorities/json'

答: 暂无答案