从 HTTPS 页面强制 AJAX 调用为 HTTPS

Posted

技术标签:

【中文标题】从 HTTPS 页面强制 AJAX 调用为 HTTPS【英文标题】:Forcing AJAX call to be HTTPS from HTTPS Page 【发布时间】:2015-04-01 09:09:27 【问题描述】:

当前从 HTTPS jsp 进行 AJAX 调用以从另一个 jsp 页面调用数据。然而,我们遇到了混合内容问题:

混合内容:“https://etc/”处的页面是通过 HTTPS 加载的,但是 请求了一个不安全的 XMLHttpRequest 端点 'http://etc/path/to/other/page.jsp'。此请求已被阻止; 内容必须通过 HTTPS 提供。

如何强制 AJAX 调用通过 HTTPS 调用?

AJAX 调用如下所示:

var url = "/path/to/other/page.jsp";

$.ajax(                                                            
    type: "POST",
    url: url,
    data: data: data,
    dataType: "html",
    timeout: 4000, 
    success: function(html) 
        /* Code on Success */
        
    ,
    error: function(request, status, error) 
         /* Code on Failure
       
);

如果我尝试从 HTTPS 调用 HTTP,我可以理解,但我不想这样做。我想强制它使用 HTTPS 调用 JSP,这样我就可以避免混合内容问题。

提前感谢您!

/* 编辑 */

有趣的是,我在变量 URL 中放入了一个绝对路径:

var url = "https://etc/path/to/other/page.jsp";

我也遇到了同样的问题。有什么东西迫使这个 AJAX 调用成为 HTTP?

【问题讨论】:

如图所示的代码,当从已经通过 HTTPS 请求的页面中运行时,应该自动使用 HTTPS,因为这就是将相对路径解析为绝对路径的方式。如果在您的情况下没有,那么肯定还有其他事情正在发生,我们还没有被告知。 问题是端点正在重定向 HTTPS。你必须修复那个服务器端。 详细说明@Quentin 所说的:如果您明确连接到https:// 地址并且仍然收到有关资源为http:// 的错误,这意味着服务器正在发送3XX(可能是 301 或 302)响应重定向到 http:// 资源。如果您不希望发生这种情况,请将您的服务器更改为不再响应 3XX HTTPS-to-HTTP 重定向。 应用在哪里?目前正在使用 apache? 知道了。我们有该重定向,但我们也有一个部分,如果 URL 是通过 HTTPS 提交的,则使用该部分进行重定向。我们已在此部分的 URL 中添加。 :) 【参考方案1】:

尝试使用其他扩展名或使用带有 .htaccess 等的类似文件夹

var url = "https://etc/path/to/other/page/";

【讨论】:

然后如何调用我需要从后端获取数据的特定 JSP 页面? 如果您的服务器中安装了 apache,您可以使用 apache configs 指向文件

以上是关于从 HTTPS 页面强制 AJAX 调用为 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

从 http 页面通过 https 发布 Ajax

混合内容:从 https 页面调用来自 API 的 http 内容

JSONP - 从理论到实践

仅针对某些特定页面将非 www/http 强制为 www/https

使用 jquery ajax 从 asp.net 网页表单页面调用 web api url

Ajax 调用在 HTTPS 上被阻止 - Chrome 扩展