我正在使用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个字符或更多的查询参数吗?
答案 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 handler
为READ_XBUF分配更多的memoy来动态扩大读取缓冲区。
现在您知道如何接受任何长度的请求。确保只在需要时才这样做。
您可能需要查看其他相关值,例如:
PUT/POST Entity
所有这些都可以从xbuf_growto()
脚本设置 - 在任何请求到达服务器之前。这也可以通过G-WAN处理程序和servlet完成,如上面引用的示例所示。