我正在测试(已弃用的)Twitter API 1.0。
例如,我想从API获取数据,使用来自任何跨域网页的AJAX浏览器请求进行客户端操作。它可以是一个新的空白选项卡,本地HTML页面或任何现有网站。
我尝试了JSONP,它很好用,但我想使用默认的XMLHttpRequest,即使Twitter服务器不支持CORS http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing。
例如,在google.com首页上,我创建了一个简单的AJAX调用Twitter API,并在Firebug中执行:
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.twitter.com/1/friends/ids.json?screen_name=baptx", false);
xhr.send();
由于同源策略,这种方法行不通且会在Firebug上打印出错误信息:
Error: Failure
xhr.send();
它返回一个HTTP 200 OK代码,但没有从服务器接收到JSON数据。
我看到了从google.com网页和api.twitter网页(它是API域名,同源)发出的请求之间存在两个区别。
已添加一个带有当前域名的Origin HTTP标头:
Origin https://www.google.com
Referer HTTP头不像从api.twitter.com页面发出的请求https://api.twitter.com/,但在我的情况下是:
Referer https://www.google.com/webhp?hl=en
这就是为什么我尝试删除Origin HTTP头并修改当前的Referer HTTP头https://api.twitter.com/。
我使用Firefox ModifyHeaders扩展程序完成了这个操作,它可以正常工作,我可以在Firebug“Net”选项卡中检查到这些更改已正确完成。
现在,我从google.com网页和api.twitter.com网页发出的请求具有相同的请求标头。 即使HTTP标头被覆盖,仍将无法从与API不同的域执行AJAX请求,为什么?
顺便问一下,您知道为什么从Firefox“新标签页”对Twitter API进行的AJAX请求会起作用吗?