解决 CORS 问题:使用 Express.js 和 Node.js

阅读时长 3 分钟读完

什么是 CORS

CORS(跨域资源共享),是一种浏览器技术,用于允许在一个网站内向另一个网站请求资源,实现跨域访问。在前后端分离的架构中,前端常常需要向不同的域名请求数据,比如调用第三方 API 或访问其他部署在不同域名下的应用。在这种情况下,浏览器会阻止跨域访问,为了解决这个问题,就需要使用 CORS。

CORS 的限制

虽然 CORS 提供了跨域访问的方法,但是浏览器会对跨域请求进行限制。一般来说,浏览器只允许跨域访问以下类型的请求:

  • GET
  • POST
  • HEAD

并且通过 CORS 请求,浏览器会添加一个额外的 HTTP 认证头来告诉服务器这是一个跨域请求,并且必须允许其他域名的访问。

使用 Express.js 和 Node.js 解决 CORS 问题

在 Express.js 中,可以使用 cors 中间件来开启 CORS 支持。cors 中间件可以针对不同的域名设置不同的允许访问策略,支持的配置项如下:

  • origin: 允许访问的域名,可以是字符串或数组,默认值为 *,允许所有域名访问。
  • methods: 允许的 HTTP 方法,可以是字符串或数组,默认允许 GETPUTPOSTDELETEOPTIONS 方法。
  • allowedHeaders: 允许的请求头,可以是字符串或数组,默认允许所有头信息。
  • exposedHeaders: 允许访问的响应头,可以是字符串或数组,默认不允许访问除了简单响应头以外的其他头信息。
  • credentials: 是否允许发送认证信息,比如 Cookie、Authorization 等,默认为 false
  • maxAge: 预检请求缓存时间,默认为 600 秒。

下面是使用 Express.js 和 cors 实现跨域请求的示例代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- ---- - ----------------

----- --- - ----------

-- -- ---- --
--------------
  ------- ---------------------
  -------- ------- --------
  --------------- ---------------- -----------------
  --------------- ----------
  ------------ -----
  ------- ----
----

-- ----
-------------------- ----- ---- -- -
  ---------------- ---------
---

-- -----
---------------- -- -- -
  ------------------------ -- ------- -- ------------------------
---

在以上示例代码中,我们设置了允许 http://example.com 的 GET 和 POST 请求,允许传递 Content-TypeAuthorization 请求头,允许访问 Token 响应头,并启用认证信息传递,预检请求缓存时间为 600 秒。

总结

CORS 问题是前端开发中常见的问题,使用 Express.js 和 Node.js 可以很容易地解决这个问题。使用 cors 中间件可以设置允许访问的域名、HTTP 方法、请求头、响应头等属性,实现安全的跨域访问。希望以上内容能对解决 CORS 问题的读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645ab119968c7c53b0d0af53

纠错
反馈