我正在用(已弃用的)Twitter API 1.0 做一些测试
例如,我想从 API 获取数据,客户端使用来自任何跨域网页的 AJAX 浏览器请求。它可以是新的空白选项卡、本地 HTML 页面或任何现有网站。
我试过 JSONP,效果很好,但我想使用默认的 XMLHttpRequest,即使 Twitter 服务器不支持 CORS http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing。
例如,在 google.com 主页上,我创建了一个使用 Firebug 执行的对 Twitter API 的简单 AJAX 调用:
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 域名,所以它适用于 Twitter API 请求,同源)。
已添加带有当前域名的 Origin HTTP 标头:
Origin https://www.google.com
Referer HTTP 标头不是 https://api.twitter.com/像来自 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 网页的请求中获得了相同的请求标头。它仍然无法从 API 以外的其他域发出 AJAX 请求,即使 HTTP 标头被覆盖,为什么?
顺便说一句,你知道为什么从 Firefox“新标签”向 Twitter API 发出的 AJAX 请求会起作用吗?