GWAN查询字符串长度问题

时间:2014-06-27 12:47:20

标签: g-wan server-configuration http-request-parameters httpentity

我正在使用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个字符或更多的查询参数吗?

1 个答案:

答案 0 :(得分:0)

G-WAN v4.5 +的错误是 &#34; 414:请求URI太大&#34;

许多生产HTTP服务器禁用PUT/POST Entities以避免滥用。

G-WAN首先使用略大于4KiB的限制,但大多数请求不需要那么多空间,所以我们让开发人员可以决定。

下面的示例(有关工作示例,请参阅entity_size.c)显示了如何从servlet修改G-WAN(服务器全局)PUT/POST Entity大小限制,但这也可以在{ {1}}或init()的{​​{1}}次调用,以及v4.10 +中提供的main()脚本:

connection handler

您可以在gwan/init.c中使用IP过滤随时更改限制(即使在连接给定用户时也是如此)。

您的servlet将决定如何处理该实体,以便您可以处置或存储在磁盘上或进行实时处理,请参阅entity.c示例。

除此之外,还有一些事情需要牢记:

  • 为避免DoS攻击让每个人向您的服务器发送大量实体(在GB中),您可能只会扩大授权用户的请求大小;

  • 在处理没有u32 *max_entity_size = (int*)get_env(argv, MAX_ENTITY_SIZE); *max_entity_size = 200 * 1024; // new size in bytes (200 KiB) 的请求时,您还可以通过使用connection handlerREAD_XBUF分配更多的memoy来动态扩大读取缓冲区。

现在您知道如何接受任何长度的请求。确保只在需要时才这样做。

您可能需要查看其他相关值,例如:

PUT/POST Entity

所有这些都可以从xbuf_growto()脚本设置 - 在任何请求到达服务器之前。这也可以通过G-WAN处理程序和servlet完成,如上面引用的示例所示。