在现代的前端应用程序中,越来越多的应用程序需要从服务器端请求数据以提供高品质的用户体验。REST API已成为现代前端开发中最重要的组成部分之一。但是,使用标准 https 协议请求服务端 API 时,我们经常会遇到证书验证问题,这会导致无法访问 API 服务。因此,在使用 PWA 应用请求 API 服务时,我们需要考虑处理证书问题。本文将介绍一些解决方案。
HTTPS 与 SSL/TLS
首先,我们需要理解 https(即安全套接字层)和 SSL/TLS(安全套接字协议)之间的差异。
HTTPS 是一个应用层协议,可以在较低的 TCP/IP 协议上实现安全通信。HTTPS 可以在不安全的公共网络上为我们提供安全的 API 请求方式。在 HTTPS 协议中,SSL 与 TLS 是两种常用的安全传输协议,SSL 使用的是不安全的实例和方法,已被广泛取代。TLS 标准于 1999 年由IETF 提出,被广泛地应用于服务器在公网与客户端之间的通信中。
PWA 访问 API 服务的流程
在 PWA 中,我们使用 Fetch API 或 XMLHTTPRequest 对 API 发出请求。在这种情况下,我们需要注意,如果 API 服务使用的是安全套接字层(SSL/TLS),则需要在浏览器中提供相应的客户端证书才能进行成功的身份验证。
当用户访问使用 SSL/TLS 加密的页面(通常是 https 协议)时,浏览器会验证此页面上的 SSL/TLS 证书。如果证书未能通过浏览器的验证,则存在一个安全风险,并会提示用户停止连接到该网站。
因此,我们需要让浏览器信任 API 服务以进行 HTTPS API 调用,并为此提供 SSL/TLS 客户端证书。
解决方案
以下是解决方案,以实现 PWA 对 SSL/TLS 保护的 API 服务的安全访问:
方案一:信任证书
我们可以简单地安装 SSL/TLS 证书并将其导入到某个客户端信任库中以解决问题。对于前端开发人员来说,这可能不是最理想的解决方法,因为这涉及到将机密数据存储在公共库中,这可能是不安全的。此外,如果证书的源发行人或有效期过期或被撤销,则存在再次安装证书的风险。
方案二:自签名证书
自签名证书是由自己签发的 SSL/TLS 证书,而不是由专业证书颁发机构颁发的证书。自签名证书通常可以用于本地测试和开发。但是,自签名证书不受信任,需要在浏览器中进行手动授权。
在开发中,系统管理员通常生成自签名证书或从专业证书颁发机构购买证书。如果您正在开发自己的 API 服务,则可以采用自签名证书来解决证书验证问题。
方案三:使用 Let's Encrypt 免费证书
Let's Encrypt 是一个免费的、自动化的证书颁发机构,可以为您的网站提供免费的 SSL/TLS 证书。Let's Encrypt 的证书可以通过 Certbot 的交互式工具获得,而 Certbot 可以将证书配置为在托管您的应用程序的服务器上自动更新。
对于开发人员来说,使用 Let's Encrypt 免费证书是一个很好的选择。可以使用 Certbot 在几分钟内获得并安装证书,并且由于 Certbot 支持自动更新证书,证书持续有效的时间也更长。
在 PWA 中使用 HTTPS API
最后,在您为我们提供的 API 服务使用 SSL/TLS 的情况下,我们可以使用以下方法来使用 HTTPS API。
-- -------------------- ---- ------- -------------------------------------- - ------- ------ -------- - --------------- ------------------- ---------------- ------- - - ----- -- ------------ --------- -- -------------- -- - -- ------------- - ------ ---------------- - -- ---------- -- - ------------------ -- ------------ -- - -------------------- -------- ------- ------- ---
在发送 API 请求时,我们需要:
- 通过第一参数传递 API 端点 URI。这应该是包含 API 根目录的相对 URI。
- 在请求头中设置所需的任何参数,如 Content Type 和 Authorization。
- 包含浏览器证书的 credentials 属性将其设为 "include" 以启用 cookie 权限。
总结
PWA 应用程序中的 REST API 是使用户能够实现先进的现代前端开发和可扩展性关键组成部分。使用 https 协议访问 API 是进行安全通信的唯一方式。然而,在向 SSL/TLS 保护的 API 发送请求时,我们经常面临证书问题。使用任何上述解决方案或结合使用这些解决方案可以将证书问题解决,让我们能够成功处理 PWA 应用程序中的 API 调用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64656e56968c7c53b061e0b2