簡體   English   中英

node.js Azure Web App 在長 url 上返回 400

[英]node.js Azure Web App returns 400 on long urls

我在 Azure Web 應用程序中托管 node.js 應用程序。 這很有效,除了如果請求太長(即長 URL 或許多標頭),服務器總是返回 HTTP 400。

似乎錯誤是由 Kestrel 網關返回的,而沒有到達我的應用程序,如果請求的長度超過 2581 字節,就會發生這種情況。 在本地運行時不會出現同樣的問題。 這是一個 GET 請求,無論 URL 是否長,或者是否有長標頭都沒有區別。

我的應用程序只是返回當前時間:

// 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} (或包含具有 long 值的標頭),它會失敗。

為什么 Azure 會像這樣限制請求長度? 托管 ASP.NET 應用程序時不會發生同樣的問題。

如果我請求GET /anything響應是預期的。

但是,如果我執行GET /{any_very_long_path}或包含一個長值的標頭),它會失敗。

我相信這個問題與這個問題@GitHub有關,它提到:

在我們的網站上,我們在某些情況下有相當大的 cookie(它可能確實不太好)並且從昨天開始我們就面臨着許多400 http 錯誤。

這是因為有8KB硬編碼 ( HTTP_MAX_HEADER_SIZE ) 限制,任何更大的返回錯誤代碼400 ...

Nodejs 文檔:http.maxHeaderSize

只讀屬性,指定 HTTP 標頭的最大允許大小(以字節為單位)。 默認為 8KB。 可使用--max-http-header-size CLI 選項進行配置。

解決方案 :

您可以嘗試使用--max-http-header-size CLI 選項作為文檔提及。

請記住,如果您在中間使用反向代理(例如 NGINX),您還必須增加最大標頭大小...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM