I have an IkiWiki site, which works fine, except for one page which I cannot edit with the CGI. Only this single page is failing, editing every other works as expected.

When clicking every button (well, except "Cancel") on the edit form, I get a "302 Found" page in the browser; the Apache logs show:

[client XXX] malformed header from script. Bad header=according%20to%20the%20availab: ikiwiki.cgi

Capturing the output from ikiwiki.cgi, I see that just these two lines are sent:

Status: 302 Found
Location: https://ocikbapps.uzh.ch/gc3wiki/ikiwiki.auth.cgi?_submitted=1;do=edit;..;_submit=Preview;attachment=

The total size in bytes of the reply is 16189; I thought this might be an issue with Apache imposing some limit on the header size; indeed, tcpflow shows that the "302 Found" message is encapsulated into an HTTP 500 "internal server error" response.

So I added this to Apache's config (std Debian 6.0):

# cat /etc/apache2/conf.d/limits.conf
LimitRequestFieldSize 65534
LimitRequestLine 65534

But I'm still getting the same error.

Any suggestions?

Update 2011-08-16: This bug report shows the exact same symptoms; the solution they adopted is to not perform the redirect when the URL length exceeds the default Apache value of 8190.

Regarding Apache limits: apparently, Apache (as of version 2.2.17) only applies the LimitRequestLine and LimitRequestFiledsize in client HTTP transactions; when dealing with the HTTP responses generated by CGI scripts, the code from server/util_script.c applies: (function ap_scan_script_header_err_core, lines 403--433)

    char x[MAX_STRING_LEN];
    char *w, *l;
    if (buffer) {
        *buffer = '\0';
    w = buffer ? buffer : x;
    while (1) {
        int rv = (*getsfunc) (w, MAX_STRING_LEN - 1, getsfunc_data);

where MAX_STRING_LEN is defined in httpd.h to be equal to HUGE_STRING_LEN, that is, 8192.

This has been filed as Debian bug #638009, so let's only discuss it in one place (ie, there) --Joey