在HTTP页面上使用https的Ajax


101

我的网站使用http和https协议;它不会影响内容。我的网站使用jQuery ajax调用,该调用也填充了页面上的某些区域。

现在,我想通过https进行所有ajax调用。(请不要问我为什么:))当我使用https协议的页面时,ajax请求正在工作。在使用http协议的页面上时,出现JavaScript错误:拒绝访问受限制的URI

我知道这是一个跨域问题(实际上,这是一个跨协议问题),并且我知道我应该在ajax调用中使用与当前页面相同的协议。

我仍然希望所有的ajax调用都为https,并在通过http提供的页面上调用它们。是否有任何解决方法来实现这一目标(某些json / proxy解决方案?),还是根本不可能?


4
为什么不将ajax与加载页面协议匹配?
scheibk,2009年

45
他们特别说:“请不要问我为什么。”
克里斯·莫斯基尼

为什么您需要带HTTPS的AJAX .....
Miles

4
例如,对于被连接到支付网关如PayPal的背景,使人们可以看到正在发生的事情更加动态结账的形式..只是可能性之一
kentor

Answers:



11

尝试JSONP。

大多数JS库使它与其他AJAX调用一样容易,但是在内部使用iframe进行查询。

如果您没有使用JSON作为有效负载,则必须围绕iframe滚动自己的机制。

就个人而言,我只是将http://页面重定向到https://


1
嗯,我已经尝试过使用jsonp:'jsonp_callback'选项集的jquery .ajax,但仍然是相同的js错误。
user135863

也许您必须在URL中添加回调参数
Javier

@ user135863您要发送查询的端点是否首先支持 JSONP?
Leigh Brenecki 2014年

1
为了我的理智,我将选择您的最后一个选择...简单重定向至https:
Dzeimsas Zvirblis,2016年

9

http://example.com/可能解析为与https://example.com/不同的VirtualHost (由于未发送Host标头,它响应该IP的默认值),因此将两者视为单独的域,因此受跨域JS限制。

JSON回调可以避免这种情况。


JSON回调上的
无效

@Kubie这个答案明天已经十岁了,断开的链接是我们为什么要问问题包括足够的信息来生存的原因。
ceejayoz

刚刚注意到10年哈...是的,这很不错。没关系,如果我发现任何问题,将在Google周围搜索并编辑答案
Kubie 19'

4

查看开源Forge项目。它提供了JavaScript TLS实现,以及一些Flash来处理实际的跨域请求:

http://github.com/digitalbazaar/forge/blob/master/README

简而言之,Forge将使您能够从通过http加载到https站点的网页发出XmlHttpRequest。您将需要通过服务器提供Flash跨域策略文件,以启用跨域请求。请查看自述文件末尾的博客文章,以获取有关其工作原理的更深入的说明。

但是,我应该提到,Forge更适合两个不同https域之间的请求。原因是存在潜在的MiTM攻击。如果从非安全站点加载JavaScript和Flash,则可能会受到危害。最安全的用途是从安全站点加载它,然后使用它访问其他站点(安全或其他)。


2

您可以尝试将https页面加载到iframe中,并通过某个网桥将所有ajax请求路由到框架中/从框架中路由出去,这是一种hackhack,但它可能有效(不确定在安全上下文下是否会施加相同的访问限制) 。否则,可以使用本地http代理重新路由请求(如任何跨域调用)。


2
阅读此线程后,我将坚持使用JSONP dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page
JGFMK 2011年

可以这样做,但是如果您需要来自iFrame的会话Cookie,请务必设置P3P标头...否则,MSE会说“ nu uh uh”
srquinn 2013年

2

这是我的工作:

使用您要发布的数据生成隐藏的iFrame。由于您仍然控制该iFrame,因此相同的来源不适用。然后,将该iFrame中的表单提交到ssl页面。然后,ssl页将重定向到带有状态消息的非SSL页。您可以访问iFrame。


可以这样做,但是如果您需要来自iFrame的会话Cookie,请务必设置P3P标头...否则,MSE会说“ nu uh uh”
srquinn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.