Уровень поддержки 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 );

кажется, поддерживает эту точку зрения, но я ожидаю, что вы, вероятно, более знакомы с кодом, чем я, и в списке рассылки будут люди, которые знают это подробно и могут быть более определенными.

Другие вопросы по тегам