Javascript 使用从localhost服务器运行的前端代码发出请求时,Wikidata query CORS出现问题

Javascript 使用从localhost服务器运行的前端代码发出请求时,Wikidata query CORS出现问题,javascript,xmlhttprequest,cors,wikidata,wikidata-api,Javascript,Xmlhttprequest,Cors,Wikidata,Wikidata Api,我正在尝试使用POST-XMLHttpRequest从wikidata API获取查询结果。但只有少数请求通过,一些请求返回CORS发出错误,这相当令人困惑 我的请求是这样的,我已经在url本身中设置了origin参数,正如我从wikidata文档中理解的那样。我还尝试在标题中设置原点,但也没有成功 setTimeout(function () { var xhr = new XMLHttpRequest(); xhr.open(

我正在尝试使用POST-XMLHttpRequest从wikidata API获取查询结果。但只有少数请求通过,一些请求返回CORS发出错误,这相当令人困惑

我的请求是这样的,我已经在url本身中设置了origin参数,正如我从wikidata文档中理解的那样。我还尝试在标题中设置原点,但也没有成功

setTimeout(function () {
          var xhr = new XMLHttpRequest();
         
          xhr.open(
            "POST",
            "https://query.wikidata.org/sparql?origin=*&format=json&query=" +
              encodeURIComponent(
                queryService(settingsService()).getPropObject(
                  vm.selected.uri,
                  prop
                )
              ),
            true
          );
          xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
              let data = JSON.parse(xhr.response);
              setObjectInnerHtml(label, data, prop);
            }
            running -= 1;
          };
          xhr.send();
        }, 300);
但它在xhr.send()处返回一个错误,如下所示:

Access to XMLHttpRequest at 'https://query.wikidata.org/sparql?origin=*&format=json&query=PREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20DISTINCT%20%3Furi%20%3FuriLabel%20WHERE%20%7B%0A%20%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ183%3E%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2FP1889%3E%20%3Furi%20.%0A%20%20OPTIONAL%20%7B%20%3Furi%20rdfs%3Alabel%20%3FuriLabel%20.%20FILTER%20(lang(%3FuriLabel)%20%3D%20%22en%22)%7D%0A%7D' from origin 'http://localhost:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这里会出什么问题

更新 这是来自同一方法的一系列请求,可以看到其中一些请求通过了,而另一些请求没有通过。出现的错误是CORS问题


好吧,我确实看到过这种情况发生在我身上(不是在维基百科上),而是在其他API服务器上,包括我自己的一些API服务器上

在进行了大量的讨论并试图排除其他因素(我尝试在本地主机和多台计算机上运行代码)之后,我发现了这一点

问题出在我的ISP上。我的本地ISP有一个不可靠的DNS服务器,连接将停止并开始工作,有时每隔几秒钟重复一次。有时,在一秒钟之内,出现了任意数量的快速连接和断开连接。每次发生这种情况时,控制台都会不断抛出CORS错误,即使它与CORS本身无关

另外,当我将这个应用程序从localhost部署到云端时,我从来没有遇到过任何问题。显然,云服务器没有互联网连接问题

总之,如果您间歇性地遇到CORS错误(如您所述),我将首先确保您的internet连接是可靠的

然后,将代码部署到在线云服务器上,看看问题是否重复


请注意:我假设您在截图中提到的电话在所有可能的方面都是相同的。在我的例子中,问题发生在具有相同负载数据的相同呼叫上。

作为
GET
请求工作-实际上,您的代码按原样工作
我已经设置了原始参数
哈?链接到您认为这是任何东西的地方—不过,它不会破坏任何东西,因为您的代码的工作方式与ISM相同。当请求通过localhost时,仅在少数请求的情况下,它就会显示此错误。有些通过,而有些不通过。这就是令人困惑的地方@Jaromandax感谢您的详细解释。是的,呼叫是相同的。我将代码发布到github页面并进行了测试,但仍然遇到相同的问题。然后,我们继续隔离问题。尝试将目标更改为其他站点。保持代码不变,将其从维基百科更改为其他内容。查看是否发生错误。如果出现错误,那么,这与您有关。如果错误不存在,那么我想,问题就出在维基百科上:)