CORS(跨来源资源共享)是一种安全机制,允许浏览器从一个源头访问另一个源头的资源。在前后端分离的开发模式下,CORS 是不可或缺的技术之一。在 Express.js 中使用 CORS,需要遵循一些最佳实践,以确保应用程序的安全性和可靠性。
什么是 CORS?
CORS 是一种基于 HTTP 头信息的机制,用于告知浏览器是否允许跨域请求。当浏览器从一个源头向另一个源头发起请求时,如果没有相应的 CORS 设置,则浏览器会拦截该请求,并返回一个错误信息。要解决这个问题,我们需要在服务端添加相应的 CORS 设置,以便浏览器可以跨域请求。
在 Express.js 中启用 CORS
在 Express.js 中,可以通过 cors
包来轻松地配置 CORS。首先,安装 cors
包:
npm install cors
然后,在服务器端的代码中,使用以下代码来启用 CORS:
const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors());
这样就可以通过默认设置启用所有的 CORS 请求了。
配置 CORS
除了使用默认设置外,也可以通过配置选项来自定义 CORS。以下是一些常用的配置选项:
origin
:设置允许跨域请求的来源。可以是单个字符串(如http://example.com
),也可以是一个数组或函数,对于每个请求,将检查其来源是否在该列表中。如果未指定,则允许所有来源。methods
:设置允许的 HTTP 方法。默认情况下,允许 GET、HEAD 和 POST 方法。allowedHeaders
:设置允许的请求头信息。exposedHeaders
:设置服务器端可以公开的响应头信息。credentials
:允许跨域请求发送凭据包括 cookie。
例如,以下代码片段演示了如何配置 CORS,只允许来自特定来源和响应指定的请求头信息:
const corsOptions = { origin: 'http://example.com', allowedHeaders: ['Content-Type', 'Authorization'], }; app.use(cors(corsOptions));
跨域会话
默认情况下,CORS 不会传递浏览器的 Cookie 或其他凭据。如果要支持带有凭据的跨域请求(例如通过 Cookie 进行身份验证),可以将 credentials
选项设置为 true
:
const corsOptions = { origin: 'http://example.com', credentials: true, }; app.use(cors(corsOptions));
在客户端发起带有凭据的请求时,必须将 withCredentials
属性设置为 true
。例如,使用 Ajax 发送带有 Cookie 的跨域请求的示例如下:
const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('GET', 'http://api.example.com/data'); xhr.send();
安全性考虑
CORS 可能会导致安全风险,允许来自不受信任的源头的请求。要确保安全性,可以采取以下措施:
- 限制允许的来源:只允许来自特定源头的请求。
- 限制允许的 HTTP 方法:只允许特定的 HTTP 方法进行请求。
- 显示的设置
Access-Control-Allow-Credentials
头信息,以确保始终允许跨域请求时正确传递凭据信息。
结论
在本文中,我们介绍了在 Express.js 中使用 CORS 的最佳实践,并提供了一些
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6729efbeddd3a70eb6cec18e