最近用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. cmu15545笔记-并发控制总结(Concurrency Control Summary)

    目录 总览 ACID 串行化与冲突操作 隔离级别 概念层级 二阶段锁 原理 级联回滚 强二阶段锁 死锁检测和避免 锁层级 实践应用 实现的隔离级别 OOC 原理 三个阶段 实现的隔离级别 处理幻读 M ...

  2. 启动Node.js前端项目

    跟前端同事联调的时候,有时前端同事要跟其他后端同事联调,心想就自己启个前端项目,这样前端同事跟其他后端同事联调的时候,我可以先自己调来试试. 安装Node.js,NPM,NVM等,一气呵成.将前端项目 ...

  3. vue3 学习笔记(不断更新中...)(2024.11.13)

    组合式API setup() 11 响应式API ref ref 用于创建响应式数据(通常用来定义 基本类型数据) 在JavaScript代码中,需要使用 .value 来操作数据 let count ...

  4. git 忽略某些文件

    如果git项目里没有  '.gitignore' 文件,则需要执行下面的操作,生成一个 生成 '.gitignore' 文件 1. git bash  打开git窗口 执行:touch .gitign ...

  5. 使用 VS Code 徒手构建 PDF 文件

    使用 VS Code 徒手构建 PDF 文件 PDF 文件是广泛应用的页面描述文件格式,从本质上讲,文件内部的结构混合使用了文本格式描述和二进制格式描述,对于简单的文件,比如说我们今天要创建的第一个 ...

  6. Nuget Reference 丢失问题

    现象 在 Visual Studio 2017 中创建一个控制台项目.创建出来的项目如下所示. 通过 NuGet 管理器,添加 Newtonsoft.Json 的 NuGet 包,安装之后,项目中添加 ...

  7. 中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

    ​ 在当今数字化时代的浪潮下,人工智能(AI)技术的蓬勃发展正为各行业带来前所未有的变革与创新契机.尤其是在金融领域,AI 模型的广泛应用已然成为提升竞争力.优化业务流程以及实现智能化转型的关键驱动力 ...

  8. Qt音视频开发27-ffmpeg视频旋转显示

    一.前言 用手机或者平板拍摄的视频文件,很可能是旋转的,比如分辨率是1280x720,确是垂直的,相当于分辨率变成了720x1280,如果不做旋转处理的话,那脑袋必须歪着看才行,这样看起来太难受,所以 ...

  9. Qt编写可视化大屏电子看板系统18-柱状分组图

    一.前言 柱状分组图是柱状堆积图的衍生或者另外一种展示效果,设置的数据值数据源集合完全一样,只不过就是把柱子给拿下来了放在旁边,然后一个分组多个柱子横向排列,不同分组之间有一定的空隙隔开,默认QCus ...

  10. 对CGAL5.0及以后版本编译的说明

    CGAL5.0及以后版本只有头文件,没有库文件了.这意味着CGAL无需编译,只需安装好CGAL的依赖项即可.类似Eigen库.