Apache HTTP Server �汾2.2
���ģ�� | ���ָ�� |
---|---|
CGI(�������ؽӿ�)������web���������ⲿ�������ɳ���֮�佻���ķ�����ͨ����ָCGI�������CGI�ű�����������վ��ʵ�ֶ�̬ҳ�����ͳ��õķ��������Ľ��������Apache web�������Ͻ���CGI�Լ���α�дCGI������н��ܡ�
Ҫ��CGI������������������������Apache������CGI��ִ�У��䷽���ж��֡�
ScriptAlias
ָ��ʹApache����ִ��һ���ض�Ŀ¼�е�CGI�����ͻ���������ض�Ŀ¼�е���Դʱ��Apache�ٶ��������е��ļ�����CGI������ͼ��������
ScriptAlias
ָ�����磺
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
���Apache����װ��Ĭ��λ�ã�Ĭ�ϵ������ļ�httpd.conf
�оͻ����������á�ScriptAlias
��Alias
ָ��dz����ƣ����Ƕ�����ӳ�䵽һ���ض�Ŀ¼��URLǰ������һ�㶼����ָ��λ��DocumentRoot
�����Ŀ¼���䲻֮ͬ����ScriptAlias
�ֶ���һ�㺬�壬��URLǰ������κ��ļ�������ΪCGI�������ԣ��������ӻ�ָʾApache���κ���/cgi-bin/
��ͷ����Դ����ӳ�䵽/usr/local/apache2/cgi-bin/
Ŀ¼�У�����֮ΪCGI����
���磬�����URLΪhttp://www.example.com/cgi-bin/test.pl
������Apache����ͼִ��/usr/local/apache2/cgi-bin/test.pl
�ļ����������������Ȼ������ļ�������ڶ��ҿ�ִ�У������ض��ķ����������������Apache����һ��������Ϣ��
���ڰ�ȫԭ��CGI����ͨ����������ScriptAlias
ָ����Ŀ¼�У�����������Ա�Ϳ����ϸ����˭����ʹ��CGI�����ǣ������ȡ��ǡ���İ�ȫ��ʩ����û�����ɲ���������Ŀ¼�е�CGI�������С����磬�����ϣ���û���UserDir
ָ��������Ŀ¼�д��ҳ�棬���������Լ���CGI������Ȩ����cgi-bin
Ŀ¼���������Ͳ�������������Ŀ¼��CGI���������
����CGI������Ŀ¼ִ����Ҫ�������裺��һ����������AddHandler
��SetHandler
ָ���cgi-script
���������ڶ�����������Options
ָ��������ExecCGI
ѡ�
�������������ļ��У�ʹ��Options
ָ����ʽ�������ض�Ŀ¼��CGI��ִ�У�
<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>
����ָ��ʹApache����CGI�ļ���ִ�С����⣬��������߷�������Щ�ļ���CGI�ļ��������AddHandler
ָ����߷��������д���cgi
��pl
�����ļ���CGI����
AddHandler cgi-script .cgi .pl
.htaccess
ָ��ʾ����������û��Ȩ����httpd.conf
�ļ�������¼���CGI����
Ϊ�������û�Ŀ¼��������".cgi
"��β���ļ���ΪCGI����ִ�У������ʹ���������ã�
<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
����������û�Ŀ¼��ָ��һ��cgi-bin
��Ŀ¼���������е��ļ���������CGI����������������ã�
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
��дCGI�����"����"����֮����������Ҫ�IJ�ͬ��
���ȣ���CGI������������ǰ�������һ��HTTP��MIME������ͷ���Կͻ���ָ�����������ݵ����ͣ����������£���������
Content-type: text/html
��Σ����Ҫ����HTML��ʽ�ģ������������������ʾ������ij����ʽ����������£������HTML��ʽ�ģ���żȻҲ�����һ��gifͼƬ����������HTML�����ݡ�
���������㣬��дCGI����ͱ�д�������������ͬ��
���CGI�����������������д�ӡһ�����֡������д�Ϊfirst.pl
�ļ������������cgi-bin
Ŀ¼�С�
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
��ʹ����ϤPerl���ԣ���ҲӦ���ܿ���������ʲô����һ�У�����Apache����ļ�������/usr/bin/perl
(�����κ�������ʹ�õ�shell)���Ͳ�ִ�С��ڶ��У���ӡ����Ҫ�����������˵�����������������У���ͷ�����������У���ʾHTTPͷ�Ľ����������У���ӡ����"Hello, World."�����˽�����
����ϲ����������������ַ��
http://www.example.com/cgi-bin/first.pl
���������ų��������λ�ã��Ϳ���������������п���һ�У�Hello, World.
����Ȼ������ô�������ģ�����һ������������������У���ô�Ϳ������������κγ���
ʹ����������������CGI�����ܻᷢ�����������
Content-Type
����ס������������������û�������еģ��ڷ�����������ӵ�е���һ������Ȩ�û���Ȩ��(ͨ����nobody
��www
)����Ҫ�����Ȩ���������ļ���ִ�С�ͨ��������nobody
�㹻��Ȩ����ִ���ļ��ķ����ǣ����ļ������κ��˽Կ�ִ�е�Ȩ�ޣ�
chmod a+x first.pl
���⣬�����Ҫ�������ļ����ж�ȡ��д�룬Ҳ�������Щ�ļ�������ȷ��Ȩ�ޡ�
������������ִ��һ������ijЩ��Ϣ���Զ�����shell����������ģ�����PATH
������shell�������õ��ļ��������Ķ��ҵ���
���ǣ���CGI����ͨ��web������ִ��ʱ����û�д�PATH
�����ԣ�����CGI���������õ��κγ���(��sendmail
)������ָ����������·����ʹshell���ҵ�������ִ�����CGI����
һ����ͨ���÷��ǣ���CGI����ĵ�һ����ָ��������(ͨ����perl
)�����磺
#!/usr/bin/perl
���뱣֤����ȷָ���������
���⣬���CGI����������ijЩ������������Ҫȷ������Ҫ�ı����Ѿ���ȷ����Apache�����˴��ݡ�
����CGI����ʧ�ܵ�ԭ�����ڳ����������⣬���������Ѿ������������ִ����CGI���������¡����������������ǰ��������������ִ����ij����ܹ����ִ���������⡣���磺
cd /usr/local/apache2/cgi-bin
./first.pl
(��Ҫ����perl
���ͳ�����Ϊshell��Apache����ݽű���һ�е�·����Ϣ�ҵ�������)
�����ȿ������������Ӧ����һ��HTTPͷ������Content-Type
�ͽ�β�Ŀ��С�����㿴���˱��ʲô��������ô�����ڷ�������������ʱ��Apache�᷵�� Premature end of script headers
���μ��������дCGI�����Ի�ø�����Ϣ��
������־��������ѡ��κδ����ڴ�����־���������أ�������Ӧ�����Ȳ鿴������������վ�ռ��ṩ�߲�������ʴ�����־����ô��Ӧ�ÿ��ǻ�һ���ռ��ṩ�ߡ�ѧ���Ķ�������־�����Կ����ҳ����Ⲣ���ٽ����
suexec����CGI������������������������û�����Ŀ¼�IJ�ͬ���Բ�ͬ���û�Ȩ�����С�suexec�м����ϸ��Ȩ��У�飬�κ�У��ʧ�ܶ���ʹCGI�������� Premature end of script headers
����
Ϊ�˼�����Ƿ�ʹ����suexec ������ apachectl -V
�����SUEXEC_BIN
��λ�á����Apache������ʱ����suexec
�������ļ��������ڴˣ���ôsuexec���ᱻ���
������ܾ�ͨsuexec�������벻Ҫʹ������Ҫ��������ֻҪɾ��(��������)SUEXEC_BIN
��ָ��λ�õ�suexec
�������ļ��������������Ϳ����ˡ�������������������������Ķ�suexec�ĵ�����ϸ�˽������л��ƣ�Ȼ������ suexec -V
�����ҵ�suexec��־�ļ�����ʹ�ø���־�ļ��ҵ���Υ���������жϹ���
�����CGI��������룬���Ļ��IJ���(������������ͷ�����֮�������ͨѶ��)�ͱ�ú������ˡ���Ϊ��Ȼ�ɹ���д��һ�������ӡ"Hello, World"������û��ʵ�ʵ��ô���
����������ʹ�ü����ʱ���������õ��ı���������·��(��ʵ���ļ���һ������·���Բ�ȫ�������)������û����Լ�����ն����͵ȵȡ������������� env
�����Եõ�������Ļ��������б�
��CGI��������У���������������������û����������������������(Netscape��IE��Lynx)������������(Apache��IIS��WebSite)�Լ���Ҫִ�е�CGI�������Ƶȵȡ�
������Щ������CGI����Ա����Ч����ֻ�ǿͻ���-������ͨѶ��һ�����ݡ������ı����б�μ�http://hoohoo.ncsa.uiuc.edu/cgi/env.html
�����CGI�����г������еĻ���������Apache���а��cgi-bin
Ŀ¼�л���һ�����Ƶij���ע�⣬��Щ�����DZ���ģ���Щ���ǿ�ѡ�ģ���������ܻῴ��һЩ�ٷ��б���û�еı��������⣬Apache�ж��ַ���������Ĭ���ṩ�ı���֮���������ר�û���������
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
�������Ϳͻ���֮�������ͨѶ��ͨ���������豸(STDIN
)�ͱ�����豸(STDOUT
)��ɡ�ͨ����STDIN
��ָ���̻���һ�����������õ�һ���ļ���STDOUT
ָ����̨����ʾ����
����POST
һ��������һ��CGI����ʱ������е����ݱ�����Ϊһ��������ʽͨ��STDIN
����CGI�����������������Ϳ��Դ�����Щ���ݣ��·���Щ���������Լ��̻���һ���ļ���
����"������ʽ"�ܼ�һ���ֶ����Ƽ���ֵ���м��õȺ�(=)���ӣ�����������ֶζ��������(&)���ӡ��dz����ַ�����ո�"&"�ź�"="�ţ���ת��Ϊ���ֵ��ʮ��������������⡣�����ַ������磺
name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
��ʱ����ᷢ��URL����Ҳ������������ַ�����������ʽ��ʹ������������ַ������������û�������QUERY_STRING
����ΪGET
�������HTML�����FORM
��ǩ������METHOD
���ԣ���ָ���������ݵĶ���ʹ��GET
��POST
��
��ij�����������ַ����ֽ��Ի��������Ϣ�����ң��п��ģ��������㴦����Щ���ݣ�����Ϊ���CGI����������Ŀ�ĵĴ�������
��дCGI����ʱ����Ӧ�ÿ���ʹ�ô�����ģ������ɴ��������Ĺ������Լ��ٴ�����ؿ�����
�����Perl���Ա�дCGI�����õ�ģ���CPAN ����õ�ģ����CGI.pm
��Ҳ���Կ�����CGI::Lite
����ʵ����һ���ڶ������������б������С���ܼ���
�����C���Ա�дCGI�������кܶ�ѡ������֮һ��CGIC
�⣬����http://www.boutell.com/cgic/
�����д�����CGI��Դ��������Usenet��comp.infosystems.www.authoring.cgi�ͱ�������CGI������⡣HTML Writers Guild ���ʼ��б���һ���������������Դ��������Դ��http://www.hwg.org/lists/hwg-servers/
���⣬�������Ķ�CGI�淶��������CGI�������������ϸ�ڣ�ԭʼ�汾��NCSA ������һ�����²ݰ���Common Gateway Interface RFC project
������һ���ʼ��б�����������ύCGI�������ʱ����Ӧ��ȷ���ṩ���㹻����Ϣ�Ը����ط��ֲ�������⣬���磺������ʲô�¡���ϣ���õ�ʲô����������������������ʲô���롢�����еķ�������CGI��������ʲô���Ա�д�ġ�������ܾ��ṩ�Ǹ�����Ĵ��롣
ע�⣬��Ҫ��CGI��������ύ��Apache bug���ݿ⣬��������ŷ��ֵ���ApacheԴ�����е����⡣