CrossRef 搜索 API 支持 cross-domain 请求吗?

Does CrossRef Search API support cross-domain requests?

CrossRef 搜索 API(docs here) provides citation information from DOI identifiers. I tried 使用它来获取此信息,但奇怪的是我收到 404 条回复。

我设置的headers是

Content-type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 86400

我从 this appspot tester 得到了相同的结果,所以我认为这不是我的代码。

任何人都可以告诉我如何让它工作吗?它在他们自己的域中工作得很好。

他们可能根本不允许 cross-domain,但我不确定 if/how 我可以检查一下。

可重现的例子:

function doiInfo(doi) {
    var doienc = encodeURIComponent(doi);
    var doiXHR;
    window.XMLHttpRequest ? doiXHR=new XMLHttpRequest() : doiXHR=new ActiveXObject("Microsoft.XMLHTTP");

    doiXHR.onreadystatechange=function()
    {
    if (doiXHR.readyState==4 && doiXHR.status==200)
    {
      console.log(doiXHR.responseText);
    } else if (doiXHR.readyState==4) {
        // something went wrong
    }
    }

    doiXHR.open("GET", "http://search.crossref.org/dois?q=" + doienc, true);
    doiXHR.setRequestHeader("Content-type", "application/json;");
    doiXHR.setRequestHeader("Access-Control-Allow-Origin", "*");
    doiXHR.setRequestHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    doiXHR.setRequestHeader("Access-Control-Allow-Headers", "Content-Type");
    doiXHR.setRequestHeader("Access-Control-Max-Age", "86400"); // cache for 1 day

//    doiXHR.withCredentials = "true";
    doiXHR.send();
}
doiInfo('10.1002/bies.201000071')

crossref.org 的浏览器控制台中,我得到

 [
  {
    "doi": "http://dx.doi.org/10.1002/bies.201000071",
    "score": 18.623272,
    "normalizedScore": 100,
    "title": "The phage-host arms race: Shaping the evolution of microbes",
    "fullCitation": "Adi Stern, Rotem Sorek, 2010, 'The phage-host arms race: Shaping the evolution of microbes', <i>BioEssays</i>, vol. 33, no. 1, pp. 43-51",
    "coins": "ctx_ver=Z39.88-2004&amp;rft_id=info%3Adoi%2Fhttp%3A%2F%2Fdx.doi.org%2F10.1002%2Fbies.201000071&amp;rfr_id=info%3Asid%2Fcrossref.org%3Asearch&amp;rft.atitle=The+phage-host+arms+race%3A+Shaping+the+evolution+of+microbes&amp;rft.jtitle=BioEssays&amp;rft.date=2010&amp;rft.volume=33&amp;rft.issue=1&amp;rft.spage=43&amp;rft.epage=51&amp;rft.aufirst=Adi&amp;rft.aulast=Stern&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.au=Adi+Stern&amp;rft.au=+Rotem+Sorek",
    "year": "2010"
  }
]

运行 从我的网站(不是 https)我得到

OPTIONS http://search.crossref.org/dois?q=10.1002%2Fbies.201000071 404 (Not Found) XMLHttpRequest cannot load http://search.crossref.org/dois?q=10.1002%2Fbies.201000071. Invalid HTTP status code 404

抛开 GET/OPTIONS 问题,它确实在页面上出现了 404,这似乎不对。

我认为您可以使用 iframe 和 window.postMessage(?) 来绕过它,但这听起来很乱。

如果我能提供更多详细信息,请发表评论,我很乐意,似乎没有人在在线之前这样做过——希望不是,因为这是不可能的!

回答您的问题标题:是的,它允许 Cross-Origin 请求。 404 表示错误的资源。 Cross-origin 问题会给你一个 401。

allow-origin header 表示可以从所有位置访问该资源。看看我的工作示例:http://pastebin.com/8W23P48Z