我需要异步调用同一域的安全(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)。
也许它将允许跨协议的请求?