来自带有 CORS 的 jQuery ajax 的 Reddit API:请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】来自带有 CORS 的 jQuery ajax 的 Reddit API:请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:Reddit API from jQuery ajax with CORS: No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2014-09-01 04:02:43 【问题描述】:

我正在尝试使用 jQuery 的 ajax 功能访问 reddit API。从我在网上看到的情况来看,我正在使用的这段代码应该能够执行 CORS:

$.ajax(
    type:"POST",
    url:"http://reddit.com/api/login",
    data: 
        api_type:"json",
        passwd:"MyRedditPassword",
        rem:false,
        user:"MyRedditUsername"
    ,
    dataType:"text",
    success:function(data)console.log("success:",data);,
    error:function(error)console.log("error:",error);,
    crossDomain:true,
    xhrFields:withCredentials:true
);

这是访问this part of reddit's API。

我收到错误No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

据我了解,此错误是服务器端的问题;他们对我的请求的响应没有 CORS 所需的标头。这只是意味着 reddit 的 API 不支持 CORS。 However, the reddit admins said here that they have implemented CORS support.

我的请求有什么问题,导致我尝试使用他们说支持的功能,但我收到的回复说他们不支持?我是否需要在我的请求中做一些不同的事情来让 reddit 发回 CORS 标头?

【问题讨论】:

试图让 CORS 工作,而不是 JSON-P 【参考方案1】:

来自您链接的帖子:

除了 JSONP 之外,我们现在还支持 CORS,以处理对 reddit API 的未经身份验证跨域请求

强调我的 - 认证请求不支持 CORS。

【讨论】:

这到底是什么意思? (未经身份验证与已验证)-顺便感谢您的回复 另外,这是否意味着完全不可能从客户端 javascript 执行此 API 调用?因为进行跨域请求的唯一两种方法是 JSONP 和 CORS,我们看到不支持 CORS,而且我们知道 JSONP 不能进行 POST 请求......所以要做到这一点,我必须设置一个我的主机中的代理还是什么? 未经身份验证意味着您无法登录。在您的问题中,您尝试通过发布到“reddit.com/api/login”来验证用户身份。 谢谢。我很想知道是否有任何解决方法——我想通过客户端 JavaScript 访问 reddit API,但我需要解决来源问题。 我不相信你现在能够做到这一点。基于浏览器、仅 Javascript 的应用程序必须等到 reddit 的 OAuth2 实现支持“隐式”授权类型。

以上是关于来自带有 CORS 的 jQuery ajax 的 Reddit API:请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

带有 Express.js 和 jQuery.ajax 的 CORS

来自带有 cookie 的平面 HTML 文件的 CORS Ajax 请求

带有域字段的 CORS cookie 仅在使用 jQuery AJAX 的 Firefox 中设置

带有 CORS 的 Ajax 请求未通过

如何使用 Web 服务和 jQuery Ajax 启用 CORS

CouchdB Jquery Ajax POST CORS