读取节点js doc。它们似乎在http主体大小和参数数量的默认限制值中是保守的:
https://github.com/expressjs/body-parser#parameterlimit
我发现你可以扩展它,这似乎是一个经证实的解决方案:
var bodyParser = require(' body-parser');
app.use(bodyParser.urlencoded({ parameterLimit:100000, 限制:' 50mb', 延伸:真实 }));
然而,仍有两个问题:
我知道答案取决于应用该解决方案的应用程序,但我希望有一个更通用的方法导向的答案来更好地理解问题。
答案 0 :(得分:1)
答案似乎是HTTP有效负载的编码。
Express.js文档(http://expressjs.com/uk/api.html#req.body)说bodyParser.urlencoded解析x-www-form-urlencoded数据。
MDN(https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)基本上说x-www-form-urlencoded数据是键/值对(我在这里读取的行)不适合大量的数据传输(使用multipart / form-data encoding发送大量数据):
x-www-form-urlencoded:值以'&'分隔的键值元组编码,键和值之间带'='。非字母数字字符是百分比编码的:这就是为什么这种类型不适合与二进制数据一起使用的原因(而是使用multipart / form-data)
bodyParser似乎将数据限制为一种安全措施,以帮助我们避免输入传输错误/问题。至少,这就是我读它的方式。
答案 1 :(得分:1)
我很难想到一个合法的用例,其中API需要在单个请求中接受超过100个参数。查看Open Web应用程序安全项目(OWASP)指南(CHEATSHEET HERE),ExpressJS设置的默认限制值似乎是对齐且负责的。我不会改变它们。
如果您认为这些限制可能会阻碍您提供所需的功能,我会强烈考虑重新考虑您的策略,因为这可能会让您面临不必要的安全漏洞。例如,您可以制作多个较小的请求等。