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

Mat*_*zer 18 javascript ajax http .net-4.0 cross-domain

我需要对同一域的安全(HTTPS)URL进行异步调用.

目前该页面正在使用常规HTTP(非安全).

换句话说:这是在同一个域中调用URL但使用HTTPS.

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

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

各种说明:

  • 我无法接受任何建议JSONP的答案.异步调用必须使用POST动词.
  • 我正在使用最新版本的jQuery.答案可能基于此库,或任何其他解决此问题.
  • 通过HTTPS访问整个页面不是一种解决方案.
  • 服务器平台是Microsoft .NET 4.0(ASP.NET 4.0).
  • UDPATE:CORS不是一个选项.在现代浏览器中没有广泛的支持.

Mat*_*zer 14

首先,我给@missingo和@PiTheNumber提出了两个问题.

花了很多时间后,我得出结论我要将整个页面切换为HTTPS.那是因为:

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

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

    • 我需要执行跨域请求,因为Web客户端应用程序必须请求位于另一个域中的RESTful服务层.没门.

    • 将所有内容切换为HTTPS会使服务层代理方法再次起作用(这是预期的行为).

无论如何,谢谢,因为这两个答案都帮助我得出了很多结论.

UPDATE

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

  • 对于任何想要支持IE8和IE9以及从HTTP到HTTPS的跨源请求的人来说,使用Microsoft描述的postMessage API(参见#7)有一种解决方法:http://blogs.msdn.com/b/ieinternals/archive/ 2010/05/13/xdomainrequest的限制,限制和-workarounds.aspx (3认同)

PiT*_*ber 9

我正在使用Access-Control-Allow-Origin.你只需发送标题就可以了.

另请参见AJAX,子域和SSL