ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

30 seconds of code:用 JavaScript 将 HTTP 页面安全重定向到 HTTPS

30 seconds of code:用 JavaScript 将 HTTP 页面安全重定向到 HTTPS 教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载本篇技术指南以 30 seconds of code 仓库中的 JavaScript 文章《How can I redirect the page to HTTPS in JavaScript?》content/snippets/js/s/https-redirect.md为核心系统讲解如何用纯浏览器端 JavaScript 检测当前页面协议并在 HTTP 环境下将页面无痕重定向到 HTTPS 版本。读完本文你将掌握location.protocol、location.href、String.prototype.split()与location.replace()的协同用法理解replace()与普通跳转在浏览器历史记录上的本质区别并获得可复制的实战代码与健壮性改进方案。背景为什么 HTTP 页面需要重定向到 HTTPSHTTP 是高度不安全且遗留的协议HTTPS 早已是 Web 的事实标准。近年来主流浏览器会直接在地址栏把 HTTP 站点标记为不安全并且屏蔽 HTTP 页面上的一系列高级功能——尤其是依赖 Secure Context安全上下文的 API例如 Service Worker、navigator.geolocation、剪贴板读写、Web Crypto 等在非 HTTPS 环境下会被禁用或抛出异常。因此如果你的网站仍然运行在 HTTP 上最好的做法是将访问者重定向到 HTTPS 版本。在 30 seconds of code 中该文章被归类到browser标签的 JavaScript 浏览器文章集合见 content/collections/js/browser.yaml属于典型的浏览器端 DOM/URL 操作场景。核心实现httpsRedirect 函数逐行拆解30 seconds of code 给出的方案非常精简只用几行代码即可完成任务const httpsRedirect () { if (location.protocol ! https:) location.replace(https:// location.href.split(//)[1]); }; httpsRedirect(); // If you are on http://mydomain.com, // you are redirected to https://mydomain.com下面逐行分析其工作原理检测当前协议location.protocol返回当前 URL 的协议名含冒号通常为http:或https:。条件判断location.protocol ! https:确保只在非 HTTPS 页面触发重定向避免 HTTPS 页面上的死循环。取出完整地址并剥离协议location.href返回当前页面的完整 URL 字符串String.prototype.split(//)按//分隔符切分[1]取到分隔符之后的部分即域名 端口 路径 查询串 锚点。拼接 HTTPS 地址用https:// ...前缀替换掉原来的http://得到等价的 HTTPS URL。执行无痕替换跳转location.replace()用新地址替换当前页面完成重定向。该方案保留了原页面的路径、查询参数与 hash例如http://mydomain.com/page?sortasc#top会精确地变成https://mydomain.com/page?sortasc#top对用户访问深度友好。深入理解location.replace() 与普通跳转的区别这是本方案中最关键的细节。与window.location.href url或location.assign(url)不同location.replace(url)会替换浏览器历史记录中的当前条目而不是新增一条记录。方法是否新增历史记录能否用返回按钮回到原页window.location.href url新增一条能会回到原 HTTP 页location.assign(url)新增一条能会回到原 HTTP 页location.replace(url)替换当前条目不能直接回到更早的页面30 seconds of code 原文特别强调使用location.replace()后按返回按钮不会回到 HTTP 页面因为该记录已被替换。这正好符合 HTTPS 重定向的预期——用户一旦进入 HTTPS就不应该再被带回不安全的 HTTP 页面。仓库中另一篇文章 content/snippets/js/s/modify-url-without-reload.md 也印证了这一点Location API 的三种改址方式都会引发页面重新加载其中replace()专门用于以 HTTP 重定向的语义替换当前条目该文还指出 Location API不限制同源 URL因此使用时需自行确保目标地址可信避免引入安全风险。健壮性变体更严谨的协议剥离写法原文使用location.href.split(//)[1]提取去掉协议后的地址简单直观。如果希望代码更严谨可以改用location.origin——它由协议 域名 端口组成见 content/snippets/js/s/window-location-cheatsheet.md天然不含协议分隔符同时完整保留路径与查询参数const httpsRedirect () { if (location.protocol ! https:) { const { origin, pathname, search, hash } location; location.replace(https://${origin.slice(http://.length)}${pathname}${search}${hash}); } };两种写法在常规域名下结果一致split(//)的写法更短origin的写法在语义上更明确。需要注意若域名本身包含//非法域名实际不会出现或使用非标准端口两种写法都以浏览器实际 URL 解析结果为准。其他 HTTPS 强制方案对比前端 JavaScript 重定向适合作为应急或前端兜底生产环境更推荐在服务器层完成服务器 301 永久重定向由 Nginx、Apache、CDN 或托管平台在响应 HTTP 请求时直接返回 301 跳转用户几乎感知不到二次请求且利于搜索引擎收录 HTTPS 版本。这是业界首选方案。meta http-equivrefresh刷新跳转在 HTML 头部声明content0; urlhttps://...不依赖 JavaScript但体验略逊于 301。JavaScript 重定向本文方案适合纯静态页面、无法改服务器配置或需要运行时判断的场景。缺点是依赖 JS 执行且严格来说属于 302 语义的客户端跳转。关联知识点window.location 速查该方案涉及的核心 API 在 30 seconds of code 的 Window.location Cheat Sheet 中有系统总结值得一并掌握location.protocol协议名如https:location.hostname域名如dev.30secondsofcode.orglocation.port端口号如8000location.host域名 端口location.origin协议 域名 端口location.pathname路径含前导斜杠location.search查询串含前导?location.hash锚点含前导#location.href完整 URL 字符串也是最简单的获取当前 URL方式见 content/snippets/js/s/current-url.md结语httpsRedirect()是 30 seconds of code 提供的一段可直接复用的浏览器端工具函数用location.protocol做协议检测用split(//)剥离并重拼协议头再用location.replace()完成不可回溯的安全跳转。把这段逻辑放入站点入口脚本并尽早执行即可为仍停留在 HTTP 的用户提供平滑的 HTTPS 过渡体验。赞分享教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载相关推荐opencodex WebSocket 生命周期显式化策略Bun idleTimeout 常量、服务端常量与回归测试实战opencodex WebSocket 生命周期显式化策略Bun idleTimeout 常量、服务端常量与回归测试实战 opencodex 作为面向 Ope教程文档30 seconds of code用 JavaScript 获取当前页面 URL 的完整指南30 seconds of code用 JavaScript 获取当前页面 URL 的完整指南 导读 在浏览器端开发中获取当前页面完整地址是最常见的需求之一教程文档30-seconds-of-code 实战用 reduce 将 JavaScript 数组按条件二分Bifurcate Array30 seconds of code 实战用 reduce 将 JavaScript 数组按条件二分Bifurcate Array 将数组一分为二bif教程文档上一篇AndroidFastScroll开源贡献指南如何参与项目开发与代码提交下一篇手把手教你配置dreame-vacuum让扫地机器人按你的习惯清扫创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表