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

为什么要使用HTTPS

HTTPS的发展历程是一段颇具趣味的历史,充满了技术创新与安全挑战。作为前端开发者为什么要使用HTTPS,难道HTTP不能用了吗?当然不是,从本质上讲HTTPS还是HTTP,对我们前端开发而言大多数情况下根本就不需要考虑是不是要使用HTTPS,HTTPS主要针对安全有要求的内容。然而,安全问题由来已久,许多前端功能和浏览器的安全策略都依赖 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是一个免费的证书颁发机构)提供的证书来为网站启用 HTTPS。Caddy提供了简单、自动化的证书颁发和续期服务。当然,如果你的网站是一个大型的商业网站,那么建议还是购买一个收费的证书,毕竟免费的东西总是有一些限制的。

结语

随着技术的不断发展,越来越多的 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. Nuxt.js 应用中的 dev:ssr-logs 事件钩子

    title: Nuxt.js 应用中的 dev:ssr-logs 事件钩子 date: 2024/11/28 updated: 2024/11/28 author: cmdragon excerpt: ...

  2. Python 潮流周刊#80:Django 项目性能调优(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  3. (一)Springboot + vue + 达梦数据库构建RBAC权限模型前后端分离脚手架保姆级教程(界面截图)

    用户登录  系统首页  用户列表  添加用户  修改用户  角色列表  添加角色  修改角色  

  4. MeteoInfo-Java解析与绘图教程(十)_JAVA绘制雷达PPI图

    天气雷达的基本要素有很多,特别是双偏振雷达更多,但业务场景经常使用的一般为基本反射率,基本速度这两种要素 接下来我们以基本反射率为例,其他的要素也是一样的,一通百通 首先我们做基本反射率的图需要确定做 ...

  5. 基于知识图谱的医疗问答系统(dockerfile+docker-compose)

    目录 一.搭建 Neo4j 图数据库 1.方式选择 2.Dockerfile+docker-compose部署neo4j容器 2.1.更新 yum 镜像源 2.2.安装 docker-ce 社区版 2 ...

  6. 在 ASP.NET Core 中 使用 Serilog

    Serilog.AspNetCore https://github.com/serilog/serilog-aspnetcore#two-stage-initialization 这是 Serilog ...

  7. PostgreSQL 的特点

    title: PostgreSQL 的特点 date: 2024/12/24 updated: 2024/12/24 author: cmdragon excerpt: PostgreSQL 是当今最 ...

  8. Qt/C++音视频开发62-电子放大/按下选择区域放大显示/任意选取区域放大

    一.前言 电子放大这个功能思考了很久,也是一直拖到近期才静下心来完整这个小功能,这个功能的前提,主要得益于之前把滤镜打通了,玩出花样来了,只要传入对应的滤镜字符串,就可以实现各种各样的效果,然后查阅滤 ...

  9. Qt编写地图综合应用15-添加删除清空重置点

    一.前言 在地图应用的相关项目中,在地图上标识一些设备点,并对点进行交互这个功能用的最多的,于是需要一套机制可以动态的添加.删除.清空.重置,重置的意思是将地图中的所有点的经纬度重新设置,其实就是先清 ...

  10. Qt编写的项目作品24-人脸识别综合应用(在线+离线+嵌入式)

    一.功能特点 支持的功能包括人脸识别.人脸比对.人脸搜索.活体检测等. 在线版还支持身份证.驾驶证.行驶证.银行卡等识别. 在线版的协议支持百度.旷视,离线版的支持百度,可定制. 除了支持X86架构, ...