1

GWAN (v4.3.14) を使用していますが、奇妙な問題に直面しています。クエリ文字列に長いテキストを渡そうとしています。GWAN では、リクエストの合計サイズが 537 文字を超えるクエリ パラメータを渡すことができないことがわかりました。 400 Bad Request
で応答します

文字列の例は次のとおりです。

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; 
}

GWAN が 1000 文字以上のクエリ パラメータを受け入れるようにする方法を教えてください。

4

1 に答える 1

0

G-WAN v4.5+ のエラーは「414: リクエスト URI が大きすぎます」です。

多くの本番 HTTP サーバーPUT/POST Entitiesは、悪用を避けるために無効になっています。

G-WAN は最初に 4KiB よりもわずかに大きい制限を使用しましたが、ほとんどの要求はそれほど多くの余裕を必要としないため、開発者が決定できるようにしました。

以下の例 (実際の例についてはentity_size.cを参照) は、サーブレットから G-WAN (サーバーグローバル)PUT/POST Entityサイズ制限を変更する方法を示していますが、これはinit()または のmain()呼び出しconnection handler、およびgwan/init.c利用可能なスクリプトからも実行できます。 v4.10 以降:

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

で IP フィルタリングを使用して、いつでも (特定のユーザーが接続している間でも) 制限を変更できますconnection handler

いずれにせよサーブレットがエンティティをどう処理するかを決定するので、ディスクに破棄または保存したり、リアルタイム処理を実行したりできます。entity.cの例を参照してください。

これ以外にも、留意すべき点がいくつかあります。

  • 誰もが巨大なエンティティを (GB 単位で) サーバーに送信できるようにする DoS 攻撃を避けるために、許可されたユーザーのみの要求サイズを拡大することができます。

  • を使用せずにリクエストを処理する場合、 を使用してREAD_XBUFPUT/POST Entityにより多くのメモリを割り当てることにより、読み取りバッファを動的に拡大することもできます。xbuf_growto()

これで、任意の長さのリクエストを受け入れる方法がわかりました。必要なときだけ行うようにしてください。

次のような他の関連する値を確認することもできます。

  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 ハンドラーとサーブレットからも実行できます。

于 2014-06-28T08:33:27.300 に答える