Web编程有些新知识,对此有些困惑。我有一个提供网站的基本express node.js网络服务器。我想将一个Gameid交给一个函数,并让其使用其Web API从Steam抓取成就信息,应该使用以下REST API调用来支持该信息:

https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPercentagesForApp_.28v0002.29

我正在处理一个脚本文件,我试图在这样的客户端文件中进行请求。

function GetSteamGameAchievements(appid)
{
   var request = new XMLHttpRequest();

    request.addEventListener('load',function(){

       console.log(JSON.stringify(this.responseText));

    });

    request.open("GET","http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid="+ appid + "&format=json",true);

    request.send(null);
}


我收到以下错误


  XMLHttpRequest无法加载
  http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid=440&format=json
  请求中没有'Access-Control-Allow-Origin'标头
  资源。因此,不允许来源'http://localhost:3000'
  访问。


我已经读过一些有关该错误的信息,但它似乎需要更改服务器端代码。尽管所有服务器端代码都执行以下操作:

// Add headers
app.use(function (req, res, next) {

  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://api.steampowered.com');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});


使用开放天气API(这是唯一的其他第三方REST API),我可以使用原始代码之类的东西来工作,所以我不确定为什么Steam API无法正常工作。使用邮递员,我提交的查询字符串很好,但是当我在客户端javascript中执行此操作时,证券有问题...但不是开放天气API ...我不确定为什么它适用于一个但其他人没有。任何帮助将不胜感激,我已经遍历了一些类似的话题,但是我认为我的笨拙使我很难理解我要去哪里哪里以及需要在哪里进行准确的修复。

最佳答案

我已经读过一些有关该错误的信息,但它似乎需要更改服务器端代码。


是的-通过您要从中读取数据的服务。即通过Steam

您不能授予自己使用访问者的浏览器从其他人的站点读取数据的权限。

由于您无法更改Steam的服务器,因此需要使用服务器而不是访问者的浏览器从Steam中获取数据。

关于javascript - Steam API访问控制-允许起源问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35861871/

10-15 00:06