JavaScript跨域调用:从HTTP到HTTPS的调用



我需要异步调用同一域的安全(HTTPS) URL。

当前页面正在使用常规HTTP(不安全)。

换句话说:这是调用同一域中的URL,但使用HTTPS。

在切换到HTTPS调用之前,我结束了实现服务器端代理以允许跨域AJAX调用,但现在我面临同源策略,因为HTTP和HTTPS也被认为是不同的起源。所以这个代理不能用。

摘要:如何做跨域,异步POST请求在这种情况下?

各种指出:

  • 我不能接受任何暗示JSONP的答案。异步调用必须使用POST谓词。
  • 我正在使用最新版本的jQuery。答案可以基于这个库,或者任何其他解决这个问题的方法。通过HTTPS访问整个页面不是一个解决方案。
  • 服务器平台是Microsoft . net 4.0 (ASP。NET 4.0)。
  • update : CORS不是一个选项。

首先,我已经+了@missingo和@ pithennumber的两个问题。

在花了很多时间之后,我得出结论,我要把整个页面切换到HTTPS。这是因为:

  • 大多数现代浏览器都支持CORS,但是Internet Explorer,从第8版开始有一个专有的实现(XDomainRequest对象),它可能在某些计算机中被禁用(我的跨域请求在Internet安全区域默认禁用)。

    • Opera不支持CORS。第12个版本将支持它,但这不是一个选项,因为用户应该先采用这个新版本,这不会在2天内。

    • 我需要做跨域请求,因为Web客户端应用程序必须请求位于另一个域中的RESTful服务层。不可能。

    • 切换到HTTPS使服务层代理方法再次工作(这是预期的行为)。

无论如何都要感谢,因为这两个答案对我得出这个结论都有很大的帮助。

更新

@Sam添加了一个评论,任何人都可能感兴趣。这是关于如何在Internet Explorer 8和9中获得CORS(参见#7):http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

我使用Access-Control-Allow-Origin。你只需要发送标题就可以了。

请参见AJAX、子域和SSL

您应该重新考虑通过HTTPS访问整个页面,或者至少确定这是不可行的。

通过HTTP加载初始页面和脚本,用户无法保证脚本是您最初打算发送的脚本,并且不会被第三方操纵(例如,通过键盘记录他的密码)。这意味着任何绕过SOP的HTTPS请求都不会提供与来自最初通过HTTPS提供服务的页面的HTTPS请求相同的安全保证。

有人看了吗?

https://github.com/jpillora/xdomain

它使用postMessage和iframes来实现cors请求,并且是跨浏览器的(不需要在IE中咬牙切齿的XDomainRequests)。

也许它将允许跨协议的请求?

相关内容

  • 没有找到相关文章

最新更新