源码包是tHttpd-2.25b
仅供学习记录
mmc - mmap cache
ssi - cgi-src/server-side-includes CGI program
fdwatch.c
支持4种fd处理方式,后续fd的操作是通过这里定义的宏进行,效果类似工厂模式
在本文件后半部分有这4中方法的具体实现
- #ifdef HAVE_KQUEUE
-
#else /* HAVE_KQUEUE */
-
# ifdef HAVE_DEVPOLL
-
# else /* HAVE_DEVPOLL */
-
# ifdef HAVE_POLL
-
# else /* HAVE_POLL */
-
# ifdef HAVE_SELECT
-
-
# endif /* HAVE_SELECT */
-
# endif /* HAVE_POLL */
-
# endif /* HAVE_DEVPOLL */
-
#endif /* HAVE_KQUEUE */
其他重要函数
- int fdwatch_get_nfiles(void) 调整fd的资源上线(似乎最多不超过8192个--hardcode?)
libhttpd.h -- defines for libhttpd
libhttpd.c -- HTTP protocol library,对应结构体参看 libhttpd.h
它的确是个lib,包含大量Http协议字段的拼接 -- 我是没有耐心去看了。。
但也有大量实际为server操作服务的函数,少数列举几个:
- free_httpd_server();
-
sockaddr_check();
-
cgi_kill();
match.c -- simple shell-style filename matcher
timers.c -- simple timer routines
thttpd.c -- tiny/turbo/throttling HTTP server
这个文件包括多数核心部分
其中几个主要全局变量:
- static httpd_server* hs = (httpd_server*) 0;
-
static connecttab* connects;
-
static throttletab* throttles;
cgi-src/redirect.c
顾名思义,是做重定向用
- int main( int argc, char** argv ) //入口
main()函数中做了几件事情
1.当前执行的script名称,找不到则退出
2.将环境变量PATH_INFO包含进来,拼成要查找的script名称
3.打开重定向规则文件
- fp = fopen( ".redirects", "r" );
4.搜寻重定向script文件是否存在,存在则生成对应url,拼接成http协议字串,返回给请求方
(重定向后的文件名不会出现在这里---因为可能并不存在---只用url代表---请求方根据url请求后才能确定是否存在---这里只是根据规则给出重定向后的url地址)
- static void
-
moved( char* script_name, char* url )
-
{
-
char* title = "Moved";
-
-
(void) printf( "\
-
Location: %s\n\
-
Content-type: text/html\n\
-
\n\
-
%s\n\
-
%s
\n\
-
The requested filename, %s, has moved to a new URL:\n\
-
%s\">%s.\n\
-
\n", url, title, title, script_name, url, url );
-
}
不存在也拼接http字串,内容当然是404
- static void
-
not_found( char* script_name )
-
{
-
char* title = "404 Not Found";
-
-
(void) printf( "\
-
Status: %s\n\
-
Content-type: text/html\n\
-
\n\
-
%s\n\
-
%s
\n\
-
The requested filename, %s, is set up to be redirected to another URL;\n\
-
however, the new URL has not yet been specified.\n\
-
\n", title, title, title, script_name );
-
}
阅读(1822) | 评论(0) | 转发(0) |