我正在使用(已弃用的)Twitter API 1.0 进行一些测试
例如,我想从 API 获取数据,客户端使用来自任何跨源网页的 AJAX 浏览器请求。它可以是新的空白标签、本地 HTML 页面或任何现有网站。
我试过 JSONP,它工作得很好,但我想使用默认的 XMLHttpRequest 即使 Twitter 服务器不支持 CORS http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing。
例如,在 google.com 主页上,我创建了一个对 Twitter API 的简单 AJAX 调用,并使用 Firebug 执行:
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.twitter.com/1/friends/ids.json?screen_name=baptx", false);
xhr.send();
Run Code Online (Sandbox Code Playgroud)
由于同源策略,这将不起作用并在 Firebug 上打印错误:
Error: Failure
xhr.send();
Run Code Online (Sandbox Code Playgroud)
它返回一个 HTTP 200 OK 代码,但没有从服务器收到 JSON 数据。
我已经看到来自 google.com 网页的请求和来自 api.twitter 网页的请求之间的两个差异(它适用于 Twitter API 请求,因为它是 API 域名,同源)。
添加了一个带有当前域名的 Origin HTTP 标头:
Origin https://www.google.com
Run Code Online (Sandbox Code Playgroud)
Referer HTTP 标头不是 https://api.twitter.com/像来自 api.twitter.com 页面的请求,但在我的情况下是:
Referer https://www.google.com/webhp?hl=en
Run Code Online (Sandbox Code Playgroud)
这就是为什么我尝试删除 Origin HTTP …