解决用 Express.js 做代理时遇到 CORS 问题

阅读时长 3 分钟读完

什么是 CORS 问题?

跨域资源共享(Cross-Origin Resource Sharing,简称 CORS)是一种 Web 标准,它允许服务器在 HTTP 响应头中自动添加额外的 HTTP 头信息,从而让浏览器和服务器进行跨源资源的共享。当浏览器发起跨域请求时,如果服务器没有设置相关的 CORS 头信息,浏览器就会报错并拒绝响应,这就是 CORS 问题。

为什么用 Express.js 做代理会出现 CORS 问题?

在开发前端项目时,通常会遇到需要跨域访问其他网站 API 的情况。为了解决这个问题,常常会使用代理服务器。Express 是一个常用的 Node.js Web 应用程序框架,也可以用来搭建代理服务器。但是,当前端通过代理服务器访问其他网站 API 时,容易出现 CORS 问题。这是因为代理服务器不是跨域资源共享的源服务器,当代理服务器向目标服务器发出请求时,目标服务器的响应中并没有包含 CORS 头信息,因此浏览器会拦截响应并报错。

如何解决用 Express.js 做代理时遇到的 CORS 问题?

为了解决这个问题,我们需要在 Express 代理服务器中设置 CORS 头信息。Express 提供了一个 cors 模块,可以很方便地将 CORS 头信息添加到响应中。

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

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

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

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

在上面的例子中,我们通过调用 app.use(cors()),将 cors 中间件添加到 Express 应用程序中。此时,无论请求来源是哪个域名,都可以访问该代理服务器的 API 资源了。

注意事项

在设置跨域访问时,还需要注意以下几点:

  1. 可以通过配置 cors 中间件的参数指定哪些来源、方法和头部可以访问服务器资源,以及是否允许携带凭证。详细信息可以参考 cors 的官方文档
  2. 设置 CORS 头信息并不能完全消除跨域问题,某些高级特性(如 Cookie、HttpOnly)依然需要特殊处理。具体情况需要根据实际需求进行修改。
  3. 在向代理服务器转发请求时,还需要设置一些请求头信息,如下面这个例子所示:
-- -------------------- ---- -------
--------------- ----- ---- -- -
  ----- ------- - -
    ---- ------------------------------
    -------- -
      ------------- --------------
      -------- --------------------------
      ------- -------------------------
    -
  --

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

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

在上面的例子中,headers 中指定了 User-Agent、Referer 和 Origin,这些头信息是必须的,否则目标网站可能会拒绝代理服务器的请求。

总结

本文介绍了在使用 Express.js 作为代理服务器时,如何解决跨域资源共享(CORS)问题。我们可以通过添加 cors 中间件,将 CORS 头信息添加到响应中,从而让浏览器和服务器进行跨源资源的共享。希望本文对大家理解和解决跨域问题有所帮助。

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

纠错
反馈