从 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的主要内容,如果未能解决你的问题,请参考以下文章
混合内容:从 https 页面调用来自 API 的 http 内容
仅针对某些特定页面将非 www/http 强制为 www/https