Уровень поддержки HTTP thttpd
Поддерживает ли thttpd HTTP 1.1 только для статических страниц? HTTP-запросы для сгенерированных CGI страниц, похоже, отвечают только HTTP 1.0.
=========================
$ curl -i http://<ip address>index.html
HTTP/1.1 200 OK
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 04 Aug 2009 07:00:52 GMT
Last-Modified: Tue, 04 Aug 2009 06:58:04 GMT
Accept-Ranges: bytes
Connection: close
Content-Length: 74
<html>
<head><title>blah</title></
head>
<body>Hello There!</body>
</html>
$ curl -i http://<ip address>/cgi-bin/hello
HTTP/1.0 200 OK
Content-type: text/html
Hello there!
=========================
thttpd CGI даже не может ответить на запрос HTTP HEAD.
$ curl --head http://<ip address>/cgi-bin/hello
HTTP/1.1 501 Not Implemented
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 04 Aug 2009 07:02:36 GMT
Last-Modified: Tue, 04 Aug 2009 07:02:36 GMT
Accept-Ranges: bytes
Connection: close
Cache-Control: no-cache,no-store
=========================
Есть ли способ включить HTTP 1.1 для запросов CGI? Кстати, это использует thttpd ver.2.25b.
Спасибо Кеннет
1 ответ
Как вы знаете, thttpd, в отличие от dhttpd, поддерживает CGI, но страница руководства не ссылается на уровень HTTP, поддерживаемый для запросов в документации. Со страницы руководства thttpd:
CGI
thttpd supports the CGI 1.1 spec.
In order for a CGI program to be run, its name must match the pattern
specified either at compile time or on the command line with the -c
flag. This is a simple shell-style filename pattern. You can use * to
match any string not including a slash, or ** to match any string
including slashes, or ? to match any single character. You can also
use multiple such patterns separated by |. The patterns get checked
against the filename part of the incoming URL. Don’t forget to quote
any wildcard characters so that the shell doesn’t mess with them.
Restricting CGI programs to a single directory lets the site adminis‐
trator review them for security holes, and is strongly recommended. If
there are individual users that you trust, you can enable their direc‐
tories too.
If no CGI pattern is specified, neither here nor at compile time, then
CGI programs cannot be run at all. If you want to disable CGI as a
security measure, that’s how you do it, just comment out the patterns
in the config file and don’t run with the -c flag.
Note: the current working directory when a CGI program gets run is the
directory that the CGI program lives in. This isn’t in the CGI 1.1
spec, but it’s what most other HTTP servers do.
Relevant config.h options: CGI_PATTERN, CGI_TIMELIMIT, CGI_NICE,
CGI_PATH, CGI_LD_LIBRARY_PATH, CGIBINDIR.
Что касается конкретного вопроса поддержки HTTP 1.1, я думаю, что вопрос на форуме поддержки thttpd был, вероятно, лучшим способом продвижения вперед, если не считать чтения кода. Я не удивлюсь только HTTP 1.0, поскольку он избавляет сервер от необходимости хранить части страницы до тех пор, пока вся страница не станет доступной, чтобы правильно заполнить счетчик байтов в заголовке HTTP 1.1.
Конечно в рутине cgi_interpose_output( httpd_conn* hc, int rfd )
в libhttpd.c последовательность начинается
(void) my_snprintf( buf, sizeof(buf), "HTTP/1.0 %d %s\015\012", status, title );
кажется, поддерживает эту точку зрения, но я ожидаю, что вы, вероятно, более знакомы с кодом, чем я, и в списке рассылки будут люди, которые знают это подробно и могут быть более определенными.