新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/23 14:11:55来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/21 7:55:59

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/21 11:01:46

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/23 14:11:44

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/22 21:24:36

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/23 14:10:55

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/21 11:01:47

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉