最近用Docusaurus搭了一个个人网站,部署后看到浏览器地址栏上“不安全”三个字感觉特别辣眼,便不由自主的想起了HTTPS。回忆起自己在日常开发中遇到的一些与HTTPS相关的知识,忍不住想将这些年积累的一些细节和心得体会整理一下。

为什么要使用HTTPS

HTTPS的发展历程是一段颇具趣味的历史,充满了技术创新与安全挑战。作为前端开发者为什么要使用HTTPS,难道HTTP不能用了吗?当然不是,从本质上讲HTTPS还是HTTP,对我们前端开发而言大多数情况下根本就不需要考虑是不是要使用HTTPSHTTPS主要针对安全有要求的内容。然而,安全问题由来已久,许多前端功能和浏览器的安全策略都依赖 HTTPS 来确保用户的安全和隐私。而我自己对以下内容印象较为深刻:

HTTP2

HTTP2是基于HTTPS实现的,所以要启用HTTP2就必须使用HTTPS。HTTP2给人影响最深刻的一定是多路复用,它允许在同一个连接上并发发送多个请求和响应,不会像 HTTP/1.x 那样每个请求需要建立新的连接,完美解决浏览器并发的限制问题(记得以前处理这个问题的时候还是参考百度,用多个域名固定资源的方法来提升并发数量)。如果说某一天领导说我们的网站要把协议升级到HTTP2,前端的同学一定要淡定,因为这几乎不会涉及到代码的修改,HTTP这个协议是给浏览器和服务器使用的,只要我们的服务端和浏览器都支持HTTP2,那这个功能就完成了。

Service Worker

Service Worker 允许 Web 应用在后台独立工作,我们可以通过它执行耗时计算、缓存资源、处理离线请求等。但由于它涉及到后台操作和缓存用户的数据,浏览器要求它只能在 HTTPS 环境下运行,这是为了避免恶意脚本的注入和保障用户数据的安全。

Web Authentication API(WebAuthn)

这个功能我并没真正的使用过,它是一种基于公钥的身份验证方式,在我们的移动端应用中,如果希望提供快捷的登陆方式比如指纹、面部识别等就可以通过这个API来实现。由于它涉及到敏感的身份信息,WebAuthn 需要在 HTTPS 环境下运行,以确保身份验证过程中的数据不会被窃取或篡改。

Geolocation API

如果需要通过浏览器获取用户的地理位置,浏览器会要求该请求通过 HTTPS 进行。这样可以确保用户的地理位置信息在传输过程中不会被第三方窃取或篡改。

Clipboard

Clipboard API 允许我们在网页中读取或写入剪贴板的内容,实现剪切、复制和粘贴功能。但由于剪贴板中可能包含用户的敏感信息,浏览器要求这个功能只能在 HTTPS 环境下运行。

Notifications API

Notifications API 允许 Web 应用在用户的设备上显示通知。它通常用于提醒用户一些重要的事件、消息或更新,尤其是在用户没有打开应用的情况下。与传统的桌面应用通知相似,Web 应用也可以通过通知向用户传递信息。目前,这已经是一个比较常见的功能,这个功能也只能在 HTTPS 环境下运行。

除以上功能外,还有很多功能也需要在HTTPS环境下运行,比如:摄像头、麦克风、蓝牙等。

日常工作中也偶尔听同事们说起遇到的一些奇葩问题,最后是使用HTTPS解决的。我自己也遇到过一次,我们的项目中使用CORS实现跨域通信,这是一个我们熟悉的解决方案。然而,最终在上线时却遇到了一些意外情况,有个功能在实际使用中频繁出现跨域问题。经过一番排查,我们发现这个功能中有一个接口的URL是以/结尾的,大致长这样:http://api.example.com/d/history/ 。虽然 URL 看起来并不特别引人注意,但实际调用时却出现了异常响应。大约有 20% 的概率可以正常响应,而其余情况下,接口返回的却是一段HTML代码,我们约定的接口返回格式应该是JSON。一位经验丰富的老大哥迅速给出了最佳解决方案:切换到HTTPS。在实际开发过程中使用HTTPS确实可以规避掉一些问题。

证书

使用HTTPS不可避免的要用到安全证书,怎么获得免费证书呢?以前都是在阿里云上直接领一个,但这次找了好久都没找到这个功能的入口。后来果断加了一个Caddy做代理,使用下来感觉基础代理配置方面比Nginx简单很多,并且它默认使用 Let's Encrypt(Let's Encrypt是一个免费的证书颁发机构)提供的证书来为网站启用 HTTPSCaddy提供了简单、自动化的证书颁发和续期服务。当然,如果你的网站是一个大型的商业网站,那么建议还是购买一个收费的证书,毕竟免费的东西总是有一些限制的。

结语

随着技术的不断发展,越来越多的 API 被引入到浏览器中,其中许多涉及隐私和数据安全的功能都要求在HTTPS环境下运行。对于前端开发者来说,HTTPS不再只是一个协议,更是一种安全意识,它已经成为每个开发者必须掌握的基础知识。

前端视角看 HTTPS的更多相关文章

  1. 【前端童鞋看过来!】给大家分享网盘里前端相关书籍,主要是和网络通信(HTTP/TCP/IP)及javascript相关的

    百度云链接:https://pan.baidu.com/s/1kUPdf5H(无密码) 截图: <HTTP权威指南> [豆瓣书评]:此书第一部分是HTTP的概略,如果你没有时间,通读第一部 ...

  2. 换一种视角看DNS(采坑篇)

    换一种视角看DNS 我们尽量用精炼的语言,尽可能的规划DNS的全貌(当然笔者水平有限,如有错误请不吝赐教). 通常啊我们在个人PC中能看到DNS的配置身影就是在上网的时候,通常如果你不配置DNS可能找 ...

  3. Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

    封面:洛小汐 作者:潘潘 一直以来 他们都说为了生活 便追求所谓成功 顶级薪水.名牌包包 还有学区房 · 不过 总有人丢了生活 仍一无所获 · 我比较随遇而安 有些事懒得明白 平日里问心无愧 感兴趣的 ...

  4. ? 这是个很好的问题。Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择。请看 https://golang.org/issue/17969 结束语(Closing notes) 通过研究 Go 垃圾收集器,我能够理解 Go GC 当前结构的背景以及它如何克服它的弱点。Go发展得非常快。如果你对 Go感兴趣,最好继

    ? 这是个很好的问题.Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择.请看 https://golang.org/i ...

  5. 你不容错过的 腾讯 AlloyTeam Web 前端大会 看点完全剖析

    AC大会 ( Alloyteam Conf ),是由腾讯前端技术团队的标杆团队 AlloyTeam 发起的前端技术大会,旨在分享团队在技术研究.产品研发.开源项目的经验沉淀.AC2017 将会继续在工 ...

  6. 从前端角度看ajax如何保护接口的安全性

    一.前言 在web中,使用Ajax调用API,撇开跨域不讲,怎么做安全验证,防止别的网站调用呢?假设没有做安全保障,任何用户都可以直接访问接口,这回暴露出极大的安全隐患. 二.后端怎么做? 1.一些接 ...

  7. 从前端开发看HTTP协议的应用

    一.Chrome Developer Network Tab Cheome Developer作为现在前端开发者最常用的开发调试工具,其具有前端可以涉及到的各方面的强大功能,为我们的开发和定位问题提供 ...

  8. 绝对精品推荐做前端的看下:Web前端开发体会十日谈

    20151208感悟: 前端人的角度来看的话,感觉像是阅读一个大牛前端的全部武功的一个秘籍说明,里面的思想高价值蛋白真是太多太多,推荐看. Web前端开发体会十日谈 一直想写这篇“十日谈”,聊聊我对W ...

  9. 模块化 require.js 入门教学(前端必看系列)

    在工作的时候总是会用到模块化开发,那接下来我就顺着这个问题来说一下什么是模块化 前端模块化 !!! JS 模块化提供给我们三种规范 分别就是 No.1 commonjs  这个其实也就代表了node. ...

  10. SpringBoot 全局视角看springboot

    从单体架构到微服务 单体架构 任何一个网站在发布初期几乎都不可能立马就拥有庞大的用户流量和海量数据,都是在不停 的试错过程中一步一步演变其自身架构,满足其自身业务.比如现在能够抗住双十一这么大 流量的 ...

随机推荐

  1. Java设计模式——适配器模式的精妙应用:探秘 JDK 源码中的 Set 类

    在 Java 编程的世界里,JDK 源码犹如一座神秘的宝藏,其中的 Set 类更是我们日常开发中频繁使用的利器.今天,就让我们像勇敢的探险家一样,深入 JDK 源码,揭开 Set 类的神秘面纱,重点剖 ...

  2. Vue.js 数据绑定

    1.标签内容绑定 双括号语法:使用 {{}} 将变量包裹起来,vue会将变量的值解析为普通文本,而非 HTML 代码 <div>{{msg}}</div> <div> ...

  3. CLZ银行问题

    CLZ银行问题 题目描述 CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP用户进入 VIP 窗口排队,剩下的进入普通窗口排队.现有M 次操作,操作有四种类型,如下: IN name V:表 ...

  4. uniapp安卓在线更新版本

    实现逻辑 通过获取线上的版本号和app的版本号进行对比 查看是不是最新版 - app版本号小于线上版本号则不是最新版 提示更新 模拟检测更新请求 起一个服务,也就是检测更新的接口 返回值为最新版本号和 ...

  5. Element Plus组件v-loading在el-dialog组件上使用无效

    前情 公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vu ...

  6. 鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面

    鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面 导读:在本篇文章里,您将掌握事件.装饰器.双向绑定等相关知识,并利用所学知识做一个待办列表的案例. 练手案例:登录界面 开始之前 ...

  7. RabbitMQ, Windows Server 上服务总线的替代品

    RabbitMQ, Windows Server 上服务总线的替代品 https://www.robfox.io/2017/04/17/rabbitmq-alternative-service-bus ...

  8. C#/.NET/.NET Core技术前沿周刊 | 第 18 期(2024年12.16-12.22)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  9. leetcode 05 回文字符串

    leetcode 05 回文字符串 1. 描述 给你一个字符串,找到里面最长的回文字符串 2. 事例 示例 1: 输入:s = "babad" 输出:"bab" ...

  10. Qt编写物联网管理平台41-自动清理早期数据

    一.前言 随着时间的增加,存储的历史记录也在不断增加,如果设备数量很多,存储间隔很短,不用多久,数据库中的记录就非常多,至少是百万级别起步,而且有些用户还是需要存储每一次的采集的数据,这数据量别说一年 ...