快速搭建基于HTTPS的本地开发环境
为什么本地开发要使用HTTPS?
因为有很多Web API必须在HTTPS环境下才可以使用。比如,Clipboard API and events(https://www.w3.org/TR/clipboard-apis)中的navigator.clipboard
对象是通过扩展Navigator
接口定义的:
partial interface Navigator {
[SecureContext, SameObject] readonly attribute Clipboard clipboard;
};
在此,partial
的意思就是扩展Navigator
接口,给它增加一个Clipboard
类型的只读成员属性clipboard
。[SecureContext, SameObject]
中的两个关键字是“扩展属性”(extended attribute),在这里修饰接口成员clipboard
。SecureContext
表示`navigator
只能在“安全上下文”中暴露clipboard
属性,SameObject
表示每次访问navigator.clipboard
必须都返回相同的值。(参见:https://heycam.github.io/webidl/#SecureContext和https://heycam.github.io/webidl/#SameObject。)
关于“安全上下文”,W3C的Secure Contexts文档(https://w3c.github.io/webappsec-secure-contexts/)中有详细解释。根据MDN,全站HTTPS和通过http://localhost交付的网页是安全的。可以通过window.isSecureContext
属性来检测当前上下文是否安全。
if (window.isSecureContext) {
navigator.clipboard.writeText('Write this to clipboard!').then(ok => true, err => false)
}
另外还有一个重要原因,就是有时候HTTP的本地请求可能会被HTTPS服务器拒绝。
无论如何,我们在开发实践中都有可能碰到将本地Web服务HTTPS化的需求。这时候,我们可以创建自己私钥并签名一个根证书,并在开发环境中配置安装和信任自己的根证书。然后再通过这个根证书和私钥签发相应域名的SSL证书。
好吧,开始干吧。