HTTP и CGI - это разные вещи. Модуль Perl CGI называет то, что он делает, «HTTP-заголовком», но на самом деле это просто заголовок CGI, который сервер должен исправить, прежде чем он вернется к клиенту. Они похожи друг на друга, поэтому люди запутываются и почему документы CGI.pm не помогают, называя их неправильными вещами.
Apache исправляет заголовки CGI, превращая их в заголовки HTTP, включая добавление строки состояния HTTP и всего, что может понадобиться.
Если ваш веб-сервер не исправляет заголовок для вас, он, вероятно, ожидает "непроверенный заголовок", где вы берете на себя ответственность за весь заголовок. Чтобы сделать это в CGI.pm, вы должны добавить опцию -nph
к вашему вызову заголовка, и вы должны сделать полный заголовок самостоятельно, включая заголовки, такие как Expires
и Last-Modified
. См. Документы в Создание стандартного заголовка HTTP . Вы можете включить NPH тремя способами:
use CGI qw(-nph)
CGI::nph(1)
print header( -nph => 1, ...)
Используете ли вы более старую версию IIS? CGI.pm раньше автоматически включал функцию NPH для IIS, но теперь эта строка закомментирована в источнике в CGI.pm:
.
# This no longer seems to be necessary
# Turn on NPH scripts by default when running under IIS server!
# $NPH++ if defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/;