Cassandra 手动分页:将 pageState 暴露给客户端(在 nodeJS 中)
Cassandra manual pagination: exposing pageState to client (in nodeJS)
向客户端公开 pageState 是否安全?它是否链接到原始查询,或者我是否可以公开其他数据?在我当前的实现中,客户端可以将任何内容作为 pageState 发送。
长话短说:
我正在 NodeJs 上构建 REST api,我从 Cassandra 集群获取数据。由于查询有相当大的结果,我需要进行某种分页。我可以使用手动分页,但在我当前的实现中,我将 pageState 发送给客户端,客户端将其发回以获得下一批结果。
if(req.query.page) {
options.pageState = new Buffer(req.query.page,'hex');
};
client.eachRow(query, [], options, function (n, row) {
arr.push(row);
}, function (err, result) {
res.send({
values: arr,
next: result.pageState
});
});
另一个想法是将它保存在某种缓存中,然后将一个 id 发送给客户端。我会在服务器和客户端之间发送该 id,并且无法修改 pageState。只是想知道这是开销还是实际需要。谢谢
如 pagination docs of the driver 中所述(请参阅底部的脚注),可以操纵页面状态标记以检索同一列族中的其他结果,因此将其暴露给用户。
您不应将页面状态公开为明文值,您应该对其进行哈希处理。
向客户端公开 pageState 是否安全?它是否链接到原始查询,或者我是否可以公开其他数据?在我当前的实现中,客户端可以将任何内容作为 pageState 发送。
长话短说: 我正在 NodeJs 上构建 REST api,我从 Cassandra 集群获取数据。由于查询有相当大的结果,我需要进行某种分页。我可以使用手动分页,但在我当前的实现中,我将 pageState 发送给客户端,客户端将其发回以获得下一批结果。
if(req.query.page) {
options.pageState = new Buffer(req.query.page,'hex');
};
client.eachRow(query, [], options, function (n, row) {
arr.push(row);
}, function (err, result) {
res.send({
values: arr,
next: result.pageState
});
});
另一个想法是将它保存在某种缓存中,然后将一个 id 发送给客户端。我会在服务器和客户端之间发送该 id,并且无法修改 pageState。只是想知道这是开销还是实际需要。谢谢
如 pagination docs of the driver 中所述(请参阅底部的脚注),可以操纵页面状态标记以检索同一列族中的其他结果,因此将其暴露给用户。
您不应将页面状态公开为明文值,您应该对其进行哈希处理。