我目前正在编写自己的Web服务器来处理cgi脚本。在我目前的测试perl脚本中,我有一点代码
print start_html("CGI Test Page"),
h1("CGI Test Page"),
h2("Post Test:"),
start_form(-method=>"POST",),
"Post Value: ",textfield('postKey'),
submit("Submit Post"),
end_form;
如您所见,start_html没有在表单定义中指定的操作参数。但是使用这段代码,我得到了该表单定义的以下html输出:
<form method="post" action="/cgitest.cgi%" enctype="multipart/form-data">
我将这个奇怪的字符附加到动作变量的末尾。所以我的问题是这样的:既然我没有在perl脚本中定义动作值,那么它使用哪个环境变量来定义它的动作?
答案 0 :(得分:3)
以下是CGI.pm source:
的相关部分if (defined $action) {
$action = $self->_maybe_escapeHTML($action);
}
else {
$action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url);
}
正如您所猜测的,如果您没有定义操作,它会尝试使用$ENV{'REQUEST_URI'}
,但如果它是空的,则使用脚本的URL。定义该URL的子例程是self_url
和url
,因此希望源代码可以帮助您确定配置中的额外百分号来自何处。