前言
在 Web 应用程序中,浏览器实施同源策略,若数据来源于不同的域、端口或协议则浏览器就会禁止该请求。由于 CORS 限制,使用前端技术与服务器通信的应用程序,仅能与其相同来源的服务器进行通信。这样既保护了服务器的安全,也带来了前后端的开发难度。koa2-cors 是针对 Koa2 web 应用快速且灵活的实施和更改 CORS 配置的工具,在开发跨域应用的过程中可以起到相当大的作用。
koa2-cors 的安装
使用 npm 可以方便地安装 koa2-cors,使用下面的命令:
npm install @koa/cors
koa2-cors 的代码实现
使用 koa2-cors 可以轻松实现 CORS 的配置。开发者可以很容易地安装它,使用它的功能。只需要在 Koa2 中使用 koa2-cors 该功能进行载入,即可继续对 CORS 进行配置。
示例代码如下:
-- -------------------- ---- ------- ----- --- - --------------- ----- ---- - --------------------- ----- --- - --- ------ -- -- ---- -------------- ------- ------------------------ -- --------- ------------ ----- -- ---- ------ ------------- ------- ------- ------ ------- --------- --------- -- ----- ---- ---- -------------- -------------------- ------------------------ -- ------------- ---- ---------------- -- -- - ------------------- -- ------ ---
koa2-cors 的配置参数
origin
允许指定的原始站点,可以使任意字符串或一组字符串。如果该配置项被省略,Cookie 不允许浏览器进行读取。
示例代码如下:
app.use(cors({ origin: 'http://localhost:3000', }));
credentials
一个布尔值,表明是否允许发送 cookie,设置为 true,则 Access-Control-Allow-Credentials 会被指定为 true。
示例代码如下:
app.use(cors({ origin: 'http://localhost:3000', credentials: true, }));
allowMethods
一个字符串数组,表明允许请求的 HTTP 方法。
示例代码如下:
app.use(cors({ origin: 'http://localhost:3000', credentials: true, allowMethods: ['GET', 'POST'], }));
exposeHeaders
一个字符串数组,表明允许访问的自定义响应头。
示例代码如下:
app.use(cors({ origin: 'http://localhost:3000', credentials: true, allowMethods: ['GET', 'POST'], exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'], }));
当 Access-Control-Allow-Origin 与 Access-Control-Allow-Credentials 配置相冲突时的处理方案
当 Access-Control-Allow-Origin 的值是 '' 时,服务器的响应具有所有的域值,浏览器会自行判断。因为 cookie 不能与 '' 共用,所以如果 Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials 均为 true,则会抛出错误。
这种情况下可以向客户端发送一个 * 点 Check,例如使用以下代码:
-- -------------------- ---- ------- -------------- ------- ---- ------------ ----- ------------- ------- -------- -------------- -------------------- ------------------------ ---- ------------- ----- ----- -- - -- ----------- --- ---------- - ---------- - ---- - ----- ------- ---
结论
跨域请求是前端开发中的一项重要技术。koa2-cors 模块可以让后端开发者轻松处理跨域问题,提高了开发效率。本文对 koa2-cors 进行了详细的讲解,包含示例代码,通过本文,开发者可以快速了解 koa2-cors 并掌握其中的配置方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67725ff56d66e0f9aad83a5b