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

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.kler.cn/a/572545.html

相关文章:

  • FPGA学习(一)——DE2-115开发板编程入级
  • 【C#】检查已有窗口,防止重复打开
  • Fiddler抓取App接口-Andriod/IOS配置方法
  • FMEA工具的发展历程及芯片行业的采用方式介绍-——芯片电子行业适用性分析
  • Ajax动态加载 和 网页动态渲染 之间的区别及应用场景
  • NVIDIA(英伟达) GPU 芯片架构发展史
  • Java多线程与高并发专题——ConcurrentHahMap 在 Java7 和 8 有何不同?
  • React中实现页面切换的深度指南:从基础到高级实践
  • GPIO的简介
  • 深入理解JavaScript的执行机制
  • 机器学习4-PCA降维
  • 14、TCP连接如何确保可靠性【高频】
  • shell指令(三)及makefile
  • Docker 的应用场景
  • Spring Expression Language (SpEL)(详解)
  • 【每日学点HarmonyOS Next知识】tabs切换卡顿、输入框焦点、打开全新web、输入框密码类型、非法变量值
  • 当电脑JDK的位置被移动,如何修改IDEA中JDK被修改后的位置
  • 深入MiniQMT:实现远程下单的高效解决方案
  • 如何设计高并发分布式系统的唯一ID?主流方案深度解析与实战选型指南
  • RabbitMQ 2025/3/5