从没有'Access-Control-Allow-Origin'标题的资源获取状态代码

时间:2016-11-23 01:59:29

标签: javascript google-chrome browser xmlhttprequest cors

我正在使用好的{ol XMLHttpRequesthttps://www.instagram.com/USERNAME发出GET请求。我的目标是确认我的用户输入的Instagram用户名确实存在,如果我可以在客户端确认这一点,那就太好了。

例如,尝试向https://www.instagram.com/9gag发出GET请求,然后返回200。 https://www.instagram.com/sakjafkhdsafd你得到404回来了。

现在,现在......似乎Instagram不允许CORS ...因为当我运行XMLHttpRequest.send()时,我收到以下错误:

XMLHttpRequest cannot load https://www.instagram.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

好的,猜猜服务器将不得不照顾这个......但是!如果我检查我的网络选项卡,我实际上看到正在发出请求,我收到了预期状态代码的回复。我也得到了所有的HTML,一切。什么......?

浏览器(在我的情况下为chrome)是如何捕获此而不是我的应用程序的呢?

按要求添加我的代码:

var xhr = new XMLHttpRequest();

xhr.open("GET", "https://www.instagram.com/" + username, false);
xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
           // do something...
        }
    }
xhr.send()

编辑:

我刚刚在Firefox上对此进行了测试,我得到了301。我想我现在的问题是“Chrome在网络选项卡上获取预期状态代码的做法是什么?”

1 个答案:

答案 0 :(得分:0)

虽然浏览器已成功检索到内容,但由于CORS,因此禁止您阅读任何内容。

CORS本身有点混乱 - 如果服务器可以满足请求,为什么浏览器会阻止它?但没关系,这是一种以向后兼容的方式粘贴的安全限制。

更令人惊讶的是,即使出现错误也是如此:服务器必须在其响应中添加特殊标头,甚至允许客户端读取状态代码或错误消息!

但浏览器会在浏览器控制台和网络标签中显示这些内容。