当API不允许Access-Control-Allow-Origin时该怎么办?

What to do when an API doesn't allow Access-Control-Allow-Origin

本文关键字:怎么办 Access-Control-Allow-Origin API 不允许      更新时间:2023-09-26

我被这些同源政策搞疯了。

当我尝试做一个请求到谷歌地图API我没有问题:

var jsonData = $.ajax({
        url:"http://maps.googleapis.com/maps/api/geocode/json?address=",
        dataType:"json",
        async:true,
        success: function(json){...}
}

我认为这是因为谷歌地图API允许访问-控制-允许-原点。但是当我尝试使用openls.geo .uni-heidelberg.de API时,我得到了跨原点错误:

var xmlData = $.ajax({
              type: "GET",
              url:"http://openls.geog.uni-heidelberg.de/route?"
              //dataType:"jsonp xml",
              dataType: "xml",
              async:true,
              crossDomain : true,
              success: function(xml){...}
}

请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许访问源'http://localhost'。

我不明白的一个想法是,如果openls API不允许跨源,为什么可以直接从我的浏览器做一个请求,只需输入url:

http://openls.geog.uni-heidelberg.de/route?start=9.256506

49.240011,结束= 8.72083,49.7606,通过=和lang = de& distunit = KM& routepref = Bicycle&权重= Shortest& avoidAreas =, useTMC = false& noMotorways = false& noTollways = false& noUnpavedroads = false& noSteps = false& noFerries = false&指令= false

但是我不能使用jquery。我也尝试过jsonp解决方案,但它不能与xml。

知道发生了什么事吗?

我为两个本地运行的项目(Angular App和Node.JS Webservices)交互引起的CORS问题挣扎了太长时间

看看这个简单的解决方案:Chrome的插件AllowControlAllowOrigin。

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

只是切换单选按钮从红色到绿色,没有更多的阻塞请求,错误或警告!我希望它能与你的API一起工作,当然这不是一个永久的解决方案,但这是一个很好的方法,可以避免在那些恼人的反复出现的问题上浪费时间。