相关疑难解决方法(0)

通过修改 HTTP 标头使用没有 CORS 的 XMLHttpRequest?

我正在使用(已弃用的)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 …

javascript ajax cross-domain http-headers cors

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

ajax ×1

cors ×1

cross-domain ×1

http-headers ×1

javascript ×1