当前位置: 首页 > news >正文

http链接转成https的链接的几种方法

以下是一个将HTTP链接转换为HTTPS的JavaScript函数,处理了多种常见输入情况:

function convertToHttps(url) {if (typeof url !== 'string') return url;// 移除首尾空格并处理空字符串const trimmedUrl = url.trim();if (!trimmedUrl) return 'https://';// 替换HTTP协议(不区分大小写)let converted = trimmedUrl.replace(/^http:\/\//i, 'https://');// 处理协议相对地址(以//开头)if (converted.startsWith('//')) {return 'https:' + converted;}// 处理无协议地址if (!/^https?:\/\//i.test(converted)) {// 处理类似 "example.com/path" 或 "www.example.com" 的情况return converted.startsWith('/') ? `https:/${converted}` : `https://${converted}`;}return converted;
}

功能说明:

  1. 协议转换

    • http://HTTP:// 转换为 https://
    • 保留已存在的 https:// 协议不变
  2. 协议相对地址处理

    • 输入 //example.com → 转换为 https://example.com
  3. 无协议地址处理

    • 输入 example.com → 转换为 https://example.com
    • 输入 /api/data → 转换为 https:///api/data(需根据业务场景调整)
  4. 特殊字符处理

    // 保留端口号和路径
    convertToHttps('http://example.com:8080/api?v=1') 
    // → "https://example.com:8080/api?v=1"// 处理用户认证信息
    convertToHttps('http://user:pass@example.com') 
    // → "https://user:pass@example.com"
    

测试用例:

// 基础转换
console.log(convertToHttps('http://example.com'));          // "https://example.com"
console.log(convertToHttps('https://secure.com'));         // "https://secure.com"
console.log(convertToHttps('HTTP://BIGSITE.COM'));         // "https://BIGSITE.COM"// 协议相对地址
console.log(convertToHttps('//cdn.example.com'));          // "https://cdn.example.com"// 无协议地址
console.log(convertToHttps('example.com/path'));           // "https://example.com/path"
console.log(convertToHttps('www.example.com'));            // "https://www.example.com"
console.log(convertToHttps('/api/data'));                 // "https:///api/data"// 特殊场景
console.log(convertToHttps('http://user:pass@site.com'));  // "https://user:pass@site.com"
console.log(convertToHttps('http://localhost:3000'));      // "https://localhost:3000"

增强建议:

  1. 域名白名单

    const WHITELIST = ['localhost', '127.0.0.1'];
    function shouldConvert(url) {const domain = new URL(url).hostname;return !WHITELIST.includes(domain);
    }
    
  2. 混合内容检测

    function hasMixedContent(pageUrl, resourceUrl) {const pageProtocol = new URL(pageUrl).protocol;const resProtocol = new URL(resourceUrl).protocol;return pageProtocol === 'https:' && resProtocol === 'http:';
    }
    
  3. 自动重定向处理

    async function secureFetch(url) {const secureUrl = convertToHttps(url);try {return await fetch(secureUrl);} catch (err) {if (err.message.includes('SSL')) {console.warn('回退到HTTP');return fetch(url.replace('https://', 'http://'));}throw err;}
    }
    

该函数可满足大多数场景的HTTP到HTTPS转换需求,建议根据具体业务场景调整协议回退策略和特殊域名处理逻辑。

http://www.lryc.cn/news/547183.html

相关文章:

  • STM32——串口通信 UART
  • mybatis日期格式与字符串不匹配bug
  • 文献分享: ConstBERT固定数目向量编码文档
  • 学习记录-用例设计编写
  • 学习工具的一天之(burp)
  • el-tree右键节点动态位置展示菜单;el-tree的节点图片动态根据节点属性color改变背景色;加遮罩层(opacity)
  • K8s 1.27.1 实战系列(一)准备工作
  • 说一下SpringBoot3新特新和JDK17新特性
  • Linux系统服务安全检测手记
  • 鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
  • [创业之路-329]:华为铁三角实施的步骤
  • 1.15-16-17-18迭代器与生成器,函数,数据结构,模块
  • java面向对象(详细讲解)
  • 代码随想录二刷|图论2
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的暴力行为检测识别系统(python+卷积神经网络)
  • 服务器CPU微架构
  • 用本地浏览器打开服务器上使用的Tensorboard
  • Nginx或Tengine服务器配置SSL证书
  • 【基础4】插入排序
  • 2安卓开发的主要语言
  • Python练习(握手问题,进制转换,日期问题,位运算,求和)
  • vtk 3D坐标标尺应用 3D 刻度尺
  • 蓝桥杯每日一题:第一周周四哞叫时间
  • DeepSeek本地接口调用(Ollama)
  • 自由学习记录(41)
  • 【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​
  • 大模型如何协助知识图谱进行实体关系之间的分析
  • 推荐几款优秀的PDF转电子画册的软件
  • 【大模型技术】LlamaFactory 的原理解析与应用
  • Golang依赖注入实战:从容器管理到应用实践