检测 HTTP 或 HTTPS 然后在 JavaScript 中强制使用 HTTPS

IT技术 javascript https window.location
2021-01-22 04:16:57

有什么方法可以检测 HTTP 或 HTTPS,然后通过 JavaScript 强制使用 HTTPS?

我有一些用于检测 HTTP 或 HTTPS 的代码,但我不能强制它使用https:.

我正在使用window.location.protocol属性来设置站点的任何内容,https:然后刷新页面以希望重新加载加载到浏览器中的新的 https 的 URL。

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}
6个回答

试试这个

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

location.href = blah将此重定向添加到浏览器历史记录中。如果用户点击后退按钮,他们将被重定向回同一页面。最好使用location.replace它,因为它不会将此重定向添加到浏览器历史记录中。

字符串比较应该是!==
2021-04-02 04:16:57
为什么windowdocument
2021-04-05 04:16:57
@WesTurner 无论哪种方式都不重要。他们都将永远是字符串。如果一个是数字或布尔值,那么它可能会有所作为。
2021-04-05 04:16:57
location.replace(url)会比location.href = url这种情况好得多您不希望在浏览器的历史记录中进行这种重定向,或者用户点击后退按钮只是为了再次重定向。
2021-04-05 04:16:57

设置 location.protocol 导航到一个新的 URL无需解析/切片任何东西。

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

火狐49有一个错误在那里https工作,但https:没有。据说已在 Firefox 54 中修复

if window.location.href.match('http:') window.location.href = window.location.href.replace('http', 'https') 适用于最新的 FF 和 Chrome。
2021-04-02 04:16:57
打破后退按钮的废话。使用location.replace来代替。
2021-04-03 04:16:57
location.protocol = "https"; 虽然在 Firefox 28 中似乎有效
2021-04-12 04:16:57

这不是一个好主意,因为您只是临时将用户重定向到 https 而浏览器不会保存此重定向。

您描述了网络服务器(apache、nginx 等)http 301、http 302 的任务

不一定是真的。有一种观点认为 301 是缓存的魔鬼。getluky.net/2010/12/14/301-redirects-cannot-be-undoon
2021-03-17 04:16:57
如果保留哈希值很重要,我可以看到它正在被使用。它不会发送到服务器,并且某些浏览器不会保留它。
2021-03-28 04:16:57
虽然做这个客户端通常不是一个好主意,但这不是我们所要求的。而且你没有展示如何去做,因此这不是一个答案。此外,在静态网页的这些日子里,通常没有办法在服务器端(想想 Github 页面)做这件事,这意味着你必须在客户端上做这件事。不过,您可以通过添加规范链接标签来帮助改进搜索,以避免人们访问非 ssl 版本。
2021-03-28 04:16:57
同意。在服务器上强制使用 https 更可靠
2021-03-31 04:16:57
这是为 https 设置 Azure 网站的链接... blogs.msdn.com/b/benjaminperkins/archive/2014/01/07/ ...
2021-04-11 04:16:57

这个怎么样?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

不过,理想情况下,您会在服务器端执行此操作。

它缺少端口
2021-03-25 04:16:57
和搜索/查询字符串也
2021-04-05 04:16:57
if (location.protocol == 'http:')
  location.href = location.href.replace(/^http:/, 'https:')