跨域资源共享(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。
origin
:定义允许的源,可以是字符串或数组,例如["*"]
允许所有的来源。maxAge
:用于发送预检请求时的缓存时间。headers
:用于访问的HTTP头部字段。exposedHeaders
:如果需要访问其他字段的值,则设置响应中公开的HTTP头部。credentials
:指定“是否允许请求凭据”。override
:如果指定,将在预检后完全忽略规则。
下面是一个更为灵活的配置示例:
-- -------------------- ---- ------- -------------- ------- ------ ----- -------- -------- -------- --------- -- - ------ ------ ------- -- -------- - ----- - ------- ------ -- ------- ------- ------ -- ---- -------- ---------- ---------------- --------------- ---------------- ------------------- -- ------ --------------- -------------------- -------------------------- -- -------------- ------------ ----- -- ------------------ --------- ---- ------------ - - --展开代码
上面的代码允许所有来源、设置了缓存时间和允许了credentials
。此外,还可以列举标头和公开标头信息。
CORS头添加
在CORS头添加阶段,Hapi.js提供了一个插件,可以在服务器级别启用。只需添加hapi-cors-headers
插件即可,而无需在每个路由配置中指定选项:
-- -------------------- ---- ------- ----- ---- - --------------- ----- ----------- - ---------------------------- ----- ------ - ------------- ----- ------------ ----- ----- -- -------------- ------- ------ ----- -------- -------- -------- --------- -- - ------ ------ ------- -- -- ----------------- ------- ----------- -- ---------------------- -- - ------------------- ------- --- -------------------- --展开代码
可以看到,这里只需使用server.register()
函数添加一个CORS头部插件即可,并无需在每个路由上添加选项。
如何测试CORS
测试CORS的最简单方法是使用Postman等工具创建跨域请求。在请求标头中添加Origin
和相关的标头(如果需要),Hapi.js的CORS头应该准确设置并反映在响应中。例如,如果您按照上面所示的例子,您应该可以在响应标头中看到类似以下的行:
access-control-allow-origin:* access-control-allow-credentials:true access-control-allow-methods:GET, POST, PUT, DELETE, OPTIONS access-control-allow-headers:Accept, Authorization, Content-Type, If-None-Match, Accept-language
指导意义
CORS实践是所有Web后端开发者都应该掌握的基本技能。理解和掌握CORS也是了解Web安全的重要一步,因为跨域脚本和HTTP访问是现代Web应用程序中许多恶意行为的根本原因。Hapi.js提供了一些有用的选项,可帮助开发者更轻松地控制CORS的行为和响应。熟练掌握Hapi.js中的CORS实践对于许多Web应用程序开发者来说,是成为完整Web开发者的基本条件之一。
示例代码
本文中的所有示例代码均可以在Github仓库上找到。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b6e26d306f20b3a634691c