【问题标题】:Same domain JSON from HTTP to HTTPS从 HTTP 到 HTTPS 的同域 JSON
【发布时间】:2013-08-09 06:30:13
【问题描述】:

我在使用 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,我有六个左右类似的问题,但没有一个适合我的情况的答案。也许这只是一个无法解决的限制?

【问题讨论】:

  • 那是跨域的。你被同源政策抓住了。要使其工作,您必须实现 CORS、使用服务器端代理、使用协议相对 url 或使用其他传输类型,例如 jsonp。将 https:// 替换为 // 以使其成为与协议相关的请求。
  • 有趣,谢谢,我什至不知道 CORS 存在!

标签: jquery json


【解决方案1】:

如 cmets 中所述,您正在尝试创建跨域 (CORS) XMLHttpRequest。这是因为URI Scheme 被定义为origin of a request 的一部分。这是可能的,但需要客户端和服务器在彼此之间传递某些标头以验证是否允许连接。

您收到的错误意味着您的服务器没有发送正确的响应标头,以便您能够向它发出 CORS XMLHttpRequests。 For info on the headers you need see the W3C spec. 有关大多数浏览器支持的更多实用信息,请参阅this article

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

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

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 2011-05-06
    • 2014-05-02
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2021-08-01
    • 2012-01-14
    相关资源
    最近更新 更多