使用 Express.js 处理跨域请求的方法

阅读时长 4 分钟读完

什么是跨域请求

跨域请求是指一个网站页面请求另一个网站的资源的情况。在 Web 应用中,浏览器限制了从脚本中发起的跨域 HTTP 请求。这种限制可以防止恶意网站通过用户的浏览器发起攻击,但也使得跨域请求变得有些复杂。

如果你有一个 API 服务器和多个客户端应用,那么客户端就会需要跨域请求获得所需的数据。这就需要在 API 服务器上设置一些 CORS(跨域资源共享)配置。

使用 Express.js 处理跨域请求

Express 是一个极受欢迎的 Node.js Web 应用程序框架,其内置支持处理跨域请求。在 Express 中可以通过 cors 中间件快速地实现跨域处理。

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

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

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

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

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

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

这是一个基本的 Express 应用,它使用 cors 中间件来允许来自任何域的请求。在具体的应用中,你可能需要根据实际需求来设置一些选项。

配置 CORS 中间件

如果你需要设置特定的 CORS 配置,可以通过传递选项对象来实现。以下选项可以提供更细粒度的控制:

  • origin:一个布尔值或字符串数组,用于指定允许的来源域(例如 ['http://example.com', 'https://example.com']),默认为 *(允许所有来源)。
  • methods:一个字符串数组,用于指定允许的HTTP方法(例如 ['GET', 'POST']),默认为 GET,HEAD,PUT,PATCH,POST,DELETE
  • allowedHeaders:一个字符串数组,用于指定允许的自定义请求头,如 ['Authorization']
  • credentials:一个布尔值,用于启用凭据。如果设置为 true,则表示允许发送和接收来自客户端的 Cookie(需要在客户端也配置为 withCredentials: true),默认为 false
-- -------------------- ---- -------
----- ------- - -------------------
----- ---- - ----------------

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

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

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

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

  -- ---------

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

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

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

需要注意的是,如果你使用了 credentials 选项来启用凭据,那么客户端也需要在请求中设置 withCredentials: true

结论

在 Express.js 中处理跨域请求非常容易和直接。使用 cors 中间件,你可以为你的应用程序设置最常见的跨域配置。如果需要更高级的配置,你可以使用选项对象来实现更细粒度的控制。

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

纠错
反馈