1

我正在尝试获得一个可以与 Apache、IIS 6 和 IIS 7 一起使用的标头。我不会在这里详细说明原因。让我们说这并不像我想象的那么容易:-)

无论如何,这个问题与NPH有关。在我们的代码(最初为 IIS 6 编写)中,我们有

use CGI qw(:standard);

print "HTTP/1.0 200 OK\n";

print header;

在每个 cgi 脚本的顶部;我读到这就是你告诉 IIS 你想要 NPH 的方式。

Apache 使用文件名来查看输出是否为 nph(nph- 必须是文件名的开头)所以我所做的(在 IIS 6 和 Apache 中都适用)如下:

use CGI qw(:standard);
print header('text/html', '200 OK');

有趣的是,IIS 7 似乎需要NPH,所以如果我不这样做

use CGI qw(:standard -nph);

或者

print "HTTP/1.0 200 OK\n";

print header('text/html', '200 OK'); #parameters are apparently optional 

浏览器试图对文件做一些奇怪的事情,因为它没有得到 mimetype。

另请注意:IIS 6 和 7 完全可以不打印任何标题,但 Apache 不喜欢这样。

无论如何,现在最好的事情就是做

use CGI qw(:standard);
print header('text/html', '200 OK');

以某种方式在 IIS 7 中工作。有谁知道我该怎么做?我不知道我们服务器配置的所有细节,但如果你告诉我如何获取你可能需要的任何细节,我可以做到。

无论哪种方式都感谢!

4

2 回答 2

1

我只是创建一个根据服务器做正确事情的子例程。你知道在每种情况下你必须做什么,所以在那种情况下就这样做。

另一个选项是修补 CGI.pm 以通过查看服务器类型正确设置其 $CGI::NPH 变量。CGI.pm 已经有了基础知识。一旦你解决了这个问题,提交一个补丁。

祝你好运 :)

于 2008-12-02T02:31:21.603 回答
0

Brian(和其他人)告诉我写一个子程序来做正确的事。希望这对其他人有帮助!

sub header {
    return (($ENV{PERLXS})?"HTTP/1.0 200 OK\r\n":"").CGI->header(@_);
}
于 2008-12-02T03:11:35.783 回答