简介
Serverless 架构已成为越来越多互联网应用的首选架构之一。与传统的单体架构相比,它更加灵活、可扩展。而为了提升开发效率和降低成本,Serverless 架构下的前端应用常常采用异构调用后端接口的方式,例如通过 AJAX 或 fetch 向后台请求数据。然而,由于浏览器的同源策略限制,前端应用需要解决跨域请求问题,本文将讨论在 Serverless 架构下如何解决这个问题。
同源策略
同源策略(Same Origin Policy)是 Web 安全模型的重要组成部分。它指的是在一个源(协议+域名+端口号)下的文档或脚本,不能够访问另一个源下的资源。例如,一个在 https://www.example.com 上的 JavaScript 程序,无法访问 http://www.example.com 或 https://sub.example.com 上的数据。这种限制很大程度上保护了 Web 应用的安全性,防止来自不可信源的攻击。
跨域请求
俗话说得好,“没有规矩,不成方圆”,但有时候规矩的存在却会阻碍业务需求。这时候,我们就需要了解如何跨过边界。在 Serverless 架构下,前端应用常常需要请求不同的服务,这个时候,请求源和资源源就产生了跨域请求的情况。
解决方案
在跨域请求的大环境下,我们需要有专业的技术和技巧来解决问题。
代理转发
代理转发是最简单的跨域请求解决方案之一。它的基本思想是在服务端建立一个代理服务器,将前端请求的资源转发给目标服务器,并将结果返回给前端。由于代理服务器和目标服务器在同一域下,因此不受同源策略的限制,可以顺利完成请求。
-- -------------------- ---- ------- -- -- ---------------------- --- ----- ------ - --- --------- ----- ----- - ---------------------- ----- ------------------------- ---- ---- --- ---------------------- ------- -- ----------- ------------------------------------------------------
JSONP
JSONP 是另一种解决跨域请求的方案。它通过动态地生成 script 标签的方式获取跨域资源,script 标签指向服务端的一个返回 JSON 数据的 API 接口。当 script 标签被加载时,会执行回调函数,从而达到获取数据的目的。JSONP 的主要原理是利用 script 标签不受同源策略限制的特性。
-- -------------------- ---- ------- -- -- ---------------------- --- -------- ------------------------ - ----- ------ - --------------------------------- ---------- - ---------------------------------------------- ------------------------------------------------------------- ------------- - --------- - -- ------- ---- -- ------------------- -- - ----- ---------- - ----------------- -- -- --------- ---
CORS
CORS(Cross-Origin Resource Sharing)是一种更为普遍的跨域请求解决方案。它需要服务端设置相关的响应头,让浏览器允许跨域请求。下面的代码展示了如何在 Koa 中启用 CORS。
const Koa = require('koa'); const cors = require('@koa/cors'); const app = new Koa(); app.use(cors({ origin: '*' }));
JWT
使用 JWT(JSON Web Token)认证方式,在跨域请求时,可以将 token 放入请求头部中,服务端可以使用 jwt 解析出 token 中的 payload(部分数据信息)给需要的业务流程,实现多系统间认证授权。
// 生成 token 与 解析 token const token = jwt.sign({ id: userId, name: userName }, 'my_secret_key', { expiresIn: '60s' }); const payload = jwt.verify(token, 'my_secret_key');
总结
通过代理转发、JSONP、CORS 和 JWT 等方式,我们可以有效地解决 Serverless 架构下的跨域请求问题。选择恰当的解决方案对业务的性能和可维护性都有非常重要的影响,需要技术人员综合考虑业务场景、技术特点等诸多因素。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ebfff3f6b2d6eab364b316