Hapi.js 中的跨域资源共享实践

阅读时长 6 分钟读完

跨域资源共享(CORS)是一种Web浏览器实现的机制,允许客户端在跨域HTTP请求时访问服务器资源。Hapi.js是Node.js Web框架中的一个流行选择,它提供了一些允许开发者轻松管理CORS的选项。在本文中,我们将讨论Hapi.js中的CORS实践,并提供实用的示例代码和指导意义。

CORS是什么

CORS是一种机制,允许客户端在跨域HTTP请求时访问服务器资源。在Web应用程序中,跨域请求是指使用不同域名、端口或协议发出的请求。例如,如果站点A上的JavaScript脚本尝试通过XHR对象请求站点B上的数据,则视为跨域请求。

在传统的Web应用程序中,浏览器限制了跨域HTTP请求,这是为了安全性考虑(否则,恶意站点可以访问受保护的站点上的敏感数据)。对于支持CORS的服务器端,开发者可以通过发送特定的HTTP响应头来授权来自其他域的请求。服务端也需要处理预检请求,并在响应中包含合适的CORS头。

Hapi.js中的CORS实践

Hapi.js提供了两个时期来处理CORS请求:计算预检路由句柄与CORS头添加句柄。 在上述之前的情况下,需要计算每个路由处理程序或服务器级别。

在Hapi.js中,我们可以轻松地通过添加一些选项来实现CORS。下面是一个简单的例子:

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

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

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

---------------------- -- -
  ------------------- ------- --- --------------------
--
展开代码

可以看到,这里我们只需要在路由的选项中添加cors:true即可启用CORS。

配置CORS选项

Hapi.js提供了一些选项,可让开发者灵活地控制CORS。

  1. origin:定义允许的源,可以是字符串或数组,例如["*"]允许所有的来源。
  2. maxAge:用于发送预检请求时的缓存时间。
  3. headers:用于访问的HTTP头部字段。
  4. exposedHeaders:如果需要访问其他字段的值,则设置响应中公开的HTTP头部。
  5. credentials:指定“是否允许请求凭据”。
  6. override:如果指定,将在预检后完全忽略规则。

下面是一个更为灵活的配置示例:

-- -------------------- ---- -------
--------------
  ------- ------
  ----- --------
  -------- -------- --------- -- -
    ------ ------ -------
  --
  -------- -
    ----- -
      ------- ------ -- -------
      ------- ------ -- ----
      -------- ---------- ---------------- --------------- ---------------- ------------------- -- ------
      --------------- -------------------- -------------------------- -- --------------
      ------------ ----- -- ------------------
      --------- ---- ------------
    -
  -
--
展开代码

上面的代码允许所有来源、设置了缓存时间和允许了credentials。此外,还可以列举标头和公开标头信息。

CORS头添加

在CORS头添加阶段,Hapi.js提供了一个插件,可以在服务器级别启用。只需添加hapi-cors-headers插件即可,而无需在每个路由配置中指定选项:

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

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

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

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

---------------------- -- -
  ------------------- ------- --- --------------------
--
展开代码

可以看到,这里只需使用server.register()函数添加一个CORS头部插件即可,并无需在每个路由上添加选项。

如何测试CORS

测试CORS的最简单方法是使用Postman等工具创建跨域请求。在请求标头中添加Origin和相关的标头(如果需要),Hapi.js的CORS头应该准确设置并反映在响应中。例如,如果您按照上面所示的例子,您应该可以在响应标头中看到类似以下的行:

指导意义

CORS实践是所有Web后端开发者都应该掌握的基本技能。理解和掌握CORS也是了解Web安全的重要一步,因为跨域脚本和HTTP访问是现代Web应用程序中许多恶意行为的根本原因。Hapi.js提供了一些有用的选项,可帮助开发者更轻松地控制CORS的行为和响应。熟练掌握Hapi.js中的CORS实践对于许多Web应用程序开发者来说,是成为完整Web开发者的基本条件之一。

示例代码

本文中的所有示例代码均可以在Github仓库上找到。

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

纠错
反馈

纠错反馈