在 Web 应用程序中,有时需要对请求进行限制,以避免过多的流量和攻击。 Hapi.js 提供了一种方便的方式来实现请求限制和速率限制。
请求限制
在 Hapi.js 中,可以通过设置 route
的 config
中的 handler
属性来对请求进行限制。可以使用 request.origination
属性来确定请求的来源。例如:
-- -------------------- ---- ------- - ------- ------ ----- --------------- ------- - -------- ----------------- ------ - -- ---------------------------------- --- ---------------- - ------ ---------- --- --- ---------- -- ------ ---- ------------------- - -- ------ ------- ----- ------------- - - ------------------ - ----- - - -
在上面的例子中,如果请求的来源 IP 地址是 '123.456.789.0',则会返回一个 401 响应。
此外,您还可以使用 server.ext()
方法在请求被处理之前拦截请求,并在其中进行限制。
server.ext('onRequest', function(request, reply) { if (request.origination.remoteAddress === '123.456.789.0') { return reply('You are not authorized to access this route!').code(401); } reply.continue(); });
在上面的例子中,如果请求的来源 IP 地址是 '123.456.789.0',则会返回一个 401 响应。
速率限制
速率限制是一种控制应用程序受到流量攻击的方法。它允许您设置允许通过的请求数量、速率和时间间隔。
在 Hapi.js 中,您可以使用 hapi-rate-limit
插件来实现速率限制。
首先,安装插件:
npm install hapi-rate-limit
然后,添加插件:
-- -------------------- ---- ------- ----- --------- - --------------------------- ----------------- ------- ---------- -------- - -------- ----- ---------- ----- ---------- ----- ----- ---- ----- ----- ------- ------ ---- -- - ----- -- - ------ ---- - - ---
在上面的例子中,我们设置了一个允许每个 IP 地址在 60 秒内最多进行 5 次请求的限制。
如果用户在时间段内超过了允许的最大请求数量,将会返回一个 429 响应。
需要注意的是,单个限制适用于具有相同限制条件(路由路径,用户或路径方法)的所有请求。因此,如果您需要对不同的路由或用户设置不同的限制,可以使用不同的 path
或 user
参数,例如:
-- -------------------- ---- ------- ----------------- ------- ---------- -------- - -------- ----- ---------- ----- ---------- ----- ----- --------------- ----- ----------- ------- ------ ---- -- - ----- ---- - - ---
在上面的例子中,我们设置了一个允许每个用户名在 60 秒内最多进行 2 次对 /api/v1/user 路径的请求的限制。
总结
在 Hapi.js 中,可以使用请求限制和速率限制来控制请求,避免过多的流量和攻击。请求限制可以通过设置 route
的 config
中的 handler
属性或使用 server.ext()
方法来实现。速率限制可以通过使用 hapi-rate-limit
插件来实现。在设置限制时,应该考虑到你的应用特征,并且应该更好的设置限制参数。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645477d5968c7c53b085b972