【问题标题】:G-WAN MAX_ENTITY_SIZE issue when post is greater than 4KB当帖子大于 4KB 时,G-WAN MAX_ENTITY_SIZE 问题
【发布时间】:2013-02-07 17:36:33
【问题描述】:

有人遇到过 MAX_ENTITY_SIZE 的问题吗?我现在和这个斗争了很长一段时间。我希望我只是在做一些愚蠢的事情,或者有人找到了解决方案。

我在 Ubuntu 64 位最新版本上使用 G-WAN 4.2.7。

这是一个测试用例。只需在 textarea 上粘贴任何文本,然后单击提交。如果它小于 4KB(或小于 3.2KB),它将正常工作。如果它大于 4KB,它将返回 404 not found 但它应该可以工作,因为我将 MAX_ENTITY_SIZE 设置为 200KB。

#include "gwan.h" // G-WAN exported functions
#include <string.h>

int main(int argc, char *argv[])
{
    xbuf_t *reply = get_reply(argv);    
    int *entity = (int*)get_env(argv, MAX_ENTITY_SIZE);

    char *text = NULL;
    get_arg("stext=", &text, argc, argv);
    if(text) // Check if text exist.
        xbuf_xcat(reply, "Text: %s<br/><br/>%d", text, strlen(text));

    static char form[] = 
        "<form method=\"post\">"
            "<textarea name=\"stext\"></textarea><br/>"
            "<input name=\"button\" type=\"submit\" value=\"Submit\" />"
        "</form><br/>Entity Size: %d";
    xbuf_xcat(reply, form, *entity);

    return 200;
}

不要忘记增加 MAX_ENTITY_SIZE 限制:

int init(int argc, char *argv[])
{
   int *entity = (int*)get_env(argv, MAX_ENTITY_SIZE);
   *entity = 200 * 1024;
   return 0;
}

更新:

在 Ubuntu 10.10 上测试,同样的问题。

【问题讨论】:

  • G-WAN v4.2.19 已随附增强的 entity.c 和 entity_size.c 示例,这些示例已通过 1.7 MiB 上传测试。试试看吧。
  • 吉尔它现在工作得很好。感谢 G-WAN 的更新。
  • Richard,我很确定@Gil 是 Gwan,很好,他监控堆栈溢出
  • 其实是G-WAN站点,我们邀请G-WAN用户使用stackoverflow——所以很自然地尝试回答他们的问题...

标签: entity http-post limit g-wan


【解决方案1】:

G-WAN v4.2.19 随附增强型 entity.centity_size.c 示例,这些示例已通过 1.7 MiB 文件上传进行测试。试试看吧。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    根据我自己的测试,您最多可以 POST 3663 字节的文件,但任何 3664 字节及更大的 POST 文件都将返回 404,无论 MAX_ENTITY_SIZE 值如何。不知道为什么使用 3663 的任意限制...

    应该可以编写一个自定义处理程序来解决这个问题,但这充其量是一个烦恼。希望我们能尽快修复。

    【讨论】:

    • 错误是 "413 Request-URI Too Long""414 Request Entity Too Large"(而不是 "404 Not找到”)。那些只是为了污染问答而创建的帐户是没有用的。请停下来。
    • @Gil 我们得到的错误是 404 Not found。当您设置 MAX_ENTITY_SIZE 大于 4kb 并发布大于 4kb 的实体时。如果您保留默认的 MAX_ENTITY_SIZE,它将返回正确的消息 413 和 414。
    【解决方案3】:

    它会生成 HDL_HTTP_ERRORS。所以没有办法执行servlet。

    【讨论】:

    • 处理程序状态 HDL_HTTP_ERRORS 让您有机会拦截 HTTP 错误(并提供另一个响应),它不会阻止脚本运行
    • 只有在输入大于 4KB 的文本时才会达到 HDL_HTTP_ERRORS。除此之外,脚本应该可以工作。你遇到的错误和我一样吗?
    • @RichardHeath 是的,甚至没有达到 4KB
    • 感谢您测试我的脚本。现在我知道这不仅仅是我的开发环境。
    • 没有人认为这是你的环境。 G-WAN v4.2.19 已随附增强的 entity.centity_size.c 示例,这些示例已通过 1.7 MiB 上传进行测试。试试看吧。
    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多