0

我在使用 jQuery 触发 JSON 帖子的非安全页面上有一个登录链接。该帖子进入同一个域,但使用安全 URL。我对 JSON 的理解是它确实允许像这样的跨域操作,但也许这是一个限制。

当我运行脚本时,我收到以下 javascript 错误:

XMLHttpRequest 无法加载 https://.... 来源 http://.... Access-Control-Allow-Origin 不允许。

我正在使用以下代码,没什么太复杂的:

// postURL is something like https://example...
// postData is data to be transmitted
$.getJSON( postURL, postData + "&json=1", function(data) {
    // no error checking yet, just proceed to resultURL
    if ( true ) { window.location = resultURL; }
});

我已经验证,如果我安全地加载我的源页面,帖子可以完美运行,所以唯一的问题是 https 的差异。

关于 SO,我有六个左右类似的问题,但没有一个适合我的情况的答案。也许这只是一个无法解决的限制?

4

1 回答 1

1

正如评论中提到的,您正在尝试创建一个跨域 (CORS) XMLHttpRequest。这是因为URI Scheme被定义为请求来源的一部分。这是可能的,但需要客户端和服务器在彼此之间传递某些标头以验证是否允许连接。

您收到的错误意味着您的服务器没有发送正确的响应标头,以便您能够向其发送 CORS XMLHttpRequests。 有关您需要的标题的信息,请参阅 W3C 规范。 有关大多数浏览器支持的更多实用信息,请参阅这篇文章

使用 jQuery,如果您的服务器支持,您可以直接使用 ajax 函数发出 CORS 请求,而不是使用 getJSON 调用它。

另一种选择是更改为使用JSONP和脚本标记注入,尽管这仍会在某些浏览器中根据设置产生安全错误。

于 2013-08-08T22:30:13.087 回答