Re: [sqlite] Why doesn't althttpd.c quit soon enough for CGI scripts?

2014-02-03 Thread Richard Hipp
On Mon, Feb 3, 2014 at 9:11 PM, Sean Woods  wrote:

> I have a very basic althttpd setup:
>
> fieldston:test swoods$ tree
> .
> └── default.website
> ├── cgi
> ├── cgi.c
> └── index.html
>
> 1 directory, 3 files
>
> `cgi` is a build of `cgi.c`, which is:
>
> fieldston:test swoods$ cat default.website/cgi.c
> #include 
> #include 
>
> int main(int argc, char *argv[]) {
> printf("Content-type: text/html\r\n");
> printf("Connection: close\r\n\r\n");
> printf("Hello, world!");
> return 1;
> }
>
> I run althttpd using the `-port` command to create a standalone server.
>
> My problem is: while requesting a static resource with this method works
> just fine, requesting a CGI resource - even with `Connection: close` as
> a header - doesn't return right away.  It seems to be waiting for an
> additional connection (keep-alive ish).
>
> What's the "proper" way to send CGI output to althttpd?  I tried a
> `Content-length` parameter and that does work, but it means I need to
> buffer my output for each response - and I thought the server was
> supposed to do that for me?
>
>
Looking at the code, it appears that althttpd.c is *not* adding the
Content-Length: header if the CGI program omits it.  A missing
Content-Length on the reply can confuse many web-browsers.

It appears that althttpd.c CGI looks at just the first line of the reply
from the CGI.  It takes action only if that first line is "location:" or
"status:".  Otherwise, the first line and everything that follows is
blindly copied through and sent back to the browser, with no additional
parsing, and without adding any Content-Length or other header fields.

Fossil is the most common CGI program run from althttpd.  And Fossil does
supply a Content-Length, as well as other relevant header fields.  So this
issue has never come up before.

-- 
D. Richard Hipp
d...@sqlite.org
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Why doesn't althttpd.c quit soon enough for CGI scripts?

2014-02-03 Thread Sean Woods
I have a very basic althttpd setup:

fieldston:test swoods$ tree
.
└── default.website
├── cgi
├── cgi.c
└── index.html

1 directory, 3 files

`cgi` is a build of `cgi.c`, which is:

fieldston:test swoods$ cat default.website/cgi.c
#include 
#include 

int main(int argc, char *argv[]) {
printf("Content-type: text/html\r\n");
printf("Connection: close\r\n\r\n");
printf("Hello, world!");
return 1;
}

I run althttpd using the `-port` command to create a standalone server.

My problem is: while requesting a static resource with this method works
just fine, requesting a CGI resource - even with `Connection: close` as
a header - doesn't return right away.  It seems to be waiting for an
additional connection (keep-alive ish).

What's the "proper" way to send CGI output to althttpd?  I tried a
`Content-length` parameter and that does work, but it means I need to
buffer my output for each response - and I thought the server was
supposed to do that for me?

I also tried setting a "Status" header to "200"

I read through the code but don't see anything obvious so it must be
more subtle...

Any pointers would be great!  Thanks.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users