【发布时间】:2019-06-15 02:43:49
【问题描述】:
我在 Azure Web 应用程序中托管一个 node.js 应用程序。这很好用,除了如果请求太长,服务器总是返回 HTTP 400(即长 URL 或许多标头)。
似乎 Kestrel 网关在没有到达我的应用程序的情况下返回了错误,如果请求的长度超过 2581 字节,就会发生这种情况。在本地运行时不会出现同样的问题。这是一个 GET 请求,不管是 URL 长还是 header 长都没有区别。
我的应用程序只是返回当前时间:
// Module dependencies
let http = require('http');
http.createServer(function (request, response) {
console.log('request ', request.url);
response.write("Request served at " + new Date().toISOString());
response.end();
}).listen(80);
如果我请求GET /anything,则响应符合预期。但是,如果我这样做 GET /{any_very_long_path} (或包含一个长值的标头)它会失败。
为什么 Azure 会像这样限制请求长度?托管 ASP.NET 应用程序时不会发生同样的问题。
【问题讨论】:
-
在 kestrel 中,没有最大 url 长度之类的东西,但也许你已经更改了
Kersel MaxRequestLineSize而你不知道它(通常最大长度为 8kb)docs.microsoft.com/en-us/dotnet/api/…。您的问题还缺少一些数据,例如您使用的 url 或您发送到服务器的请求? -
我没有更改该设置,但不幸的是,服务器是由 Azure 提供和配置的,而我无法对其进行配置。我将更新问题以描述如何触发问题。
-
GET url 不应保留太长。长度没有标准限制,但浏览器也有一些限制technomanor.wordpress.com/2012/04/03/maximum-url-size
-
@TarunLalwani 同意了,但是请求长的原因是 Azure AD 设置的 URL 参数和 cookie。不幸的是,这些都超出了我的控制范围。
标签: node.js azure http kestrel-http-server