我在非安全页面上有一个登录链接,使用jQuery触发JSON帖子。该帖子转到同一个域但使用安全URL。我对JSON的理解是它确实允许这样的跨域操作,但这可能是一个限制。
当我运行脚本时,我收到以下javascript错误:
XMLHttpRequest无法加载https:// .... Access-Control-Allow-Origin不允许使用Origin http:// ....
我正在使用以下代码,没有太复杂:
// 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上有六个左右的类似问题,但没有一个答案在我的情况下有效。也许这只是一个无法解决的限制?
答案 0 :(得分:1)
正如评论中所提到的,您正在尝试创建一个Cross Origin(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和脚本标记注入,尽管这仍然会在某些浏览器中根据设置提供安全性错误。