1

我正在使用GWAN(v4.3.14)並面臨一個奇怪的問題。我試圖在查詢字符串中傳遞一些長文本。我發現GWAN不允許我傳遞超過537個字符的總請求大小的查詢參數。
它與400錯誤的請求響應GWAN查詢字符串長度問題

的示例串是:

http://xxx.xxx.xxx.xxx:yyyy/?t.cpp&c=DbE9kdOJGMm9yr7aypGlQBY1a9rZuiaMDAAnTJSbOBRJZo45YHbpAO5VENLa6IcmlSadZnTucpKBKb0E0G15pFHCgB4oNxqQ3m1K0CX8K15RQkawb8MThuoIHKp02vk9WwJFU5NkBJtwu80onudOkwWPUiGxKKcJiSwJJNcgDY1LQIJ1GnvgRGgomthoxppsZ1cl7zxIf5CjWggzsbUnADDTq5W4pBXveVnugOBHryqdTylhI4tudeae2jUnswezxtQM1qKG3ezGkM2dN68R7YxpCEfZ2N1nXggUkYdGn6em7veq5G5LpTVrdexn0fSozGbeNfHXS2OLjWGhffcEdGeu1dFKnFxNac6IETbIiVvTjv55wcZI7WBiTA0r60KJkUZYNn59W6XhnAwTk0zCYN2Rq8LraOjHzjXHjcyL9Sk6jw4D9K0wWLsiZHDfTOlnPr9jYp2SesyHlUJsCHPiHOR4fCBVwQMwh5YOddcpl2Kbr6CjSjWabaac 

在我的C代碼++文件是:

# include "gwan.h" 
# include <iostream> 
using namespace std; 

int main (int argc, char * argv[]) 
{ 
    if(argc) 
    { 
     cout<<argv[0]; 
     xbuf_cat(get_reply(argv), argv[0]); 
    } 
    else 
    { 
     xbuf_cat(get_reply(argv), "pass something to me to see it on your screen."); 
    } 

    return 200; 
} 

有人可以幫我做金桂冠接受1000個字符或更多的查詢參數?

回答

0

G-WAN v4.5 +的錯誤是「414:請求URI太大」

許多生產HTTP服務器禁用PUT/POST Entities以避免濫用。

G-WAN首次使用的限制略大於4KiB,但大多數請求並不需要太多空間,所以我們已經使開發人員可以決定。

下面的例子(見entity_size.c的工作示例)展示瞭如何修改G-WAN從一個servlet(服務器全局)PUT/POST Entity大小限制,但是這也可以在connection handlerinit()main()調用來完成和從在4.10版+可用gwan/init.c腳本:通過在使用connection handler IP過濾

u32 *max_entity_size = (int*)get_env(argv, MAX_ENTITY_SIZE); 
*max_entity_size = 200 * 1024; // new size in bytes (200 KiB) 

您可以在任何時間(甚至在一個給定的用戶連接)改變的極限。

您的servlet將決定如何處理實體,因此您可以在磁盤上進行處理或存儲或進行實時處理,請參閱entity.c示例。

在此之外,還有幾件事情要記住:

  • 避免DoS攻擊讓大家發送超大實體的服務器(GBS),你可能會擴大的授權請求大小僅限用戶;

  • 與請求處理時沒有PUT/POST Entity你也可以動態地通過使用xbuf_growto()分配更多memoy到READ_XBUF放大讀緩衝區。

現在你知道如何接受任何長度的請求。確保你只在需要時才做。

您可能要檢查像其他相關的值:

KALIVE_TMO  // time-out in ms for HTTP keep-alives 
    REQUEST_TMO  // time-out in ms waiting for request 
    MIN_SEND_SPEED // send rate in bytes/sec (if < close) 
    MIN_READ_SPEED // read rate in bytes/sec (if < close) 

所有這些都可以從gwan/init.c腳本設置 - 之前,任何請求都可以打到服務器。這也可以從G-WAN處理程序和servlet完成,如上面引用的示例所示。

+0

感謝您的迴應吉爾。 我無法在gwan目錄中找到init.c文件。 也可以告訴我從哪裏可以下載G-WAN v4.5? gwan.com網站上的最新版本是v 4.3.14。 –

+0

如果我沒記錯,** init.c **是v4.10 +的一個特性。 G-WAN v4.5於2013年5月向註冊用戶開放,他們目前使用v4.12。在我們基於G-WAN的雲服務出貨後,G-WAN v5將在今年晚些時候公開發布。你能接受上面的答案嗎?謝謝。 – Gil

+0

建議的解決方案似乎是針對「PUT/POST實體大小限制」。我正在嘗試用一個長查詢字符串做一個'GET'。不幸的是,在我當前使用的'PUT/POST'中不能使用。 我已經嘗試了你提到的方法,但他們還沒有制定出來。這裏是我的處理程序代碼 'u32 * max_entity_size =(int *)get_env(argv,MAX_ENTITY_SIZE); * max_entity_size = 200 * 1024; //新的字節大小(200 KiB) xbuf_t * xbuf =(int *)get_env(argv,READ_XBUF); xbuf_growto(xbuf,200 * 1024);' –