Javascript 对于通过HTTPS提供服务的站点,带有相对URL的AJAX调用将转到HTTP

Javascript 对于通过HTTPS提供服务的站点,带有相对URL的AJAX调用将转到HTTP,javascript,ajax,iis,https,relative-path,Javascript,Ajax,Iis,Https,Relative Path,我们将站点托管在负载平衡器后面的IIS服务器上。LB执行SSL卸载,其背后的所有内容都与HTTP通信 问题在于,服务页面中使用相对URL指向同一web服务器的AJAX请求试图通过HTTP而不是HTTPS进行连接。这不符合我们的CSP策略,并且由于内容混合,通常不会呈现。如果这些URL在客户端浏览器上解析,为什么会发生这种情况 该URL当前看起来像: url: '/controller/someaction' 在页面上,例如尝试调用 如果我们使用协议相对路径: url: '//controlle

我们将站点托管在负载平衡器后面的IIS服务器上。LB执行SSL卸载,其背后的所有内容都与HTTP通信

问题在于,服务页面中使用相对URL指向同一web服务器的AJAX请求试图通过HTTP而不是HTTPS进行连接。这不符合我们的CSP策略,并且由于内容混合,通常不会呈现。如果这些URL在客户端浏览器上解析,为什么会发生这种情况

该URL当前看起来像:

url: '/controller/someaction'
在页面上,例如尝试调用

如果我们使用协议相对路径:

url: '//controller/someaction'
我们完全失去了主机,它试图呼叫

设置升级不安全请求时存在一个问题,该请求当前会导致无限重定向循环。从长远来看,这可能会解决问题,但添加响应头会带来比短期内解决的问题更多的问题。可能会有一个涉及ajaxSetup/beforeSend修改URL的黑客,但这感觉真的很脏。我们可以浏览整个代码库并将URL更改为“https://”+windows.location.host+'/controller/someaction”,但这感觉既脏又耗时

搜索表明,如果URL(当前或请求的)以“/”结尾,行为可能会有所不同,但实验表明,我们在所有组合中都看到相同的行为


知道为什么会这样吗?我们不希望改变SSL卸载行为,但如果这是唯一的选择,我们可以改变。

我最好的猜测是,禁用SSL卸载将为您解决这一问题,负载平衡器后面的服务器无法知道如何使用HTTPS响应,浏览器将阻止HTTP响应并发出隆隆声,这就是你的答案。

看了一些其他答案,他们建议出于某种原因添加一个尾随斜杠,可能至少值得一试。因此,将您的url更改为
'/controller/someaction/'
我提到过,我尝试过,但没有成功。不过谢谢。对不起,我没有完整地阅读这个问题。是的,我唯一能让它发挥作用的方法就是按照你描述的肮脏的方式去做,如果你想按照你可以使用的方式去做的话