我正在使用好的{ol XMLHttpRequest
向https://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在网络选项卡上获取预期状态代码的做法是什么?”
答案 0 :(得分:0)
虽然浏览器已成功检索到内容,但由于CORS,因此禁止您阅读任何内容。
CORS本身有点混乱 - 如果服务器可以满足请求,为什么浏览器会阻止它?但没关系,这是一种以向后兼容的方式粘贴的安全限制。
更令人惊讶的是,即使出现错误也是如此:服务器必须在其响应中添加特殊标头,甚至允许客户端读取状态代码或错误消息!
但浏览器会在浏览器控制台和网络标签中显示这些内容。