Как я могу получить заголовок, который будет работать с IIS 6, 7 и Apache? - PullRequest
1 голос
/ 02 декабря 2008

Я пытаюсь получить заголовок, который будет работать с 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. Кто-нибудь знает, как я могу это сделать? Я не знаю всех деталей для конфигурации нашего сервера, но если вы скажете мне, как получить любую информацию, которая вам может понадобиться, я могу это сделать.

Спасибо в любом случае!

Ответы [ 2 ]

1 голос
/ 02 декабря 2008

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

Другой вариант заключается в исправлении файла CGI.pm для правильной установки его переменной $ CGI :: NPH с учетом типа сервера. CGI.pm уже имеет основы там. Как только вы это исправите, отправьте патч.

Удачи:)

0 голосов
/ 02 декабря 2008

Брайан (и другие) сказал мне написать подпрограмму, которая бы поступала правильно. Надеюсь, это поможет кому-то еще!

sub header {
    return (($ENV{PERLXS})?"HTTP/1.0 200 OK\r\n":"").CGI->header(@_);
}
...