我有一个nodejs应用,我在其中将Express用于REST API。
其中一个api可以接受SQL查询,在数据库上运行它并返回JSON响应。一切正常,直到我用一个长的SQL查询测试了api。
调试后,我注意到SQL查询是自动修剪的。
可以在GET URL中传递的参数长度是否受到限制?
这就是我的api的样子
app.get('/v1/runsql/:query', (req, res) => {
let result = runQuery.executeQuery(req.params.query);
..... execute some more code here
})
答案 0 :(得分:3)
节点不对URL本身施加限制,而是对整个请求标头(包括URI)实施限制。请求的标头+ URI不能超过80 kb。
此外,公开一个允许任意SQL查询(无论它们是否在URL上)的API是一个非常糟糕的主意。大多数应用程序都花了很多精力来尝试防止任意SQL查询不应公开的记录,删除表等。有意暴露这样的端点就像感觉到您在自找麻烦。
答案 1 :(得分:0)
http协议没有限制url的长度,但是浏览器和服务器(无论是Node还是其他)都限制了url的长度。如果您确实想实现此目的,则可以使用 POST 方法代替获取
并且http协议规范设置为:如果网址长度超出限制,服务器可能会返回代码 414