如何在Perl中为IE设置内容类型

如何在Perl中为IE设置内容类型,perl,Perl,我正在用Perl编写一个网页。我在脚本开头用这一行写出内容类型: print header('Content-Type' => 'text/HTML'); 这在Chrome和Firefox中是可行的,但在IE中,它仍然尝试将页面作为文件下载。我应该怎么做才能使IE工作?将行更改为: print "Content-type:text/html\n\n"; 不知道为什么原始版本不起作用,但无论如何。CGI文档显示just-type作为标题中内容类型的键。如果它是唯一的参数,您可以忽略它,只

我正在用Perl编写一个网页。我在脚本开头用这一行写出内容类型:

print header('Content-Type' => 'text/HTML');

这在Chrome和Firefox中是可行的,但在IE中,它仍然尝试将页面作为文件下载。我应该怎么做才能使IE工作?

将行更改为:

print "Content-type:text/html\n\n";

不知道为什么原始版本不起作用,但无论如何。

CGI文档显示just-type作为标题中内容类型的键。如果它是唯一的参数,您可以忽略它,只指定值

header( -type => 'text/html' );

# or even

header('text/html');
我想你用的是CGI.pm。 header不设置单个头,而是设置完整的HTTP头。 从标题的文档/示例中:

      print header('text/plain');

我认为您将CGI::header与PHP中类似的命名函数混淆了。但是相同的名称并不意味着相同的功能。

您可以通过在命令行上运行来查看生成的标题:

perl -MCGI=:standard -we 'print header( q{Content-Type} => q{text/html} )'
产出:

Status: text/html Content-Type: Content-Type; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 如果要使用命名参数调用标头,则必须使用破折号作为它们的前缀。除了已识别的参数-type、-status、-expires和-cookie之外的任何其他参数都将从初始破折号中删除并转换为标头,因此以下两项工作都将进行:

perl -MCGI=:standard -we 'print header( q{-Content-Type} => q{text/html} )'

perl -MCGI=:standard -we 'print header( q{-type} => q{text/html} )'
产出:

Status: text/html Content-Type: Content-Type; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 产出:

Status: text/html Content-Type: Content-Type; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1 Content-Type: text/html; charset=ISO-8859-1
mime类型是小写的。text/html,而不是text/htmlid没有任何区别。它已在Chrome/Firefox中工作,因此我认为mime类型不区分大小写。@MarcB From:在RFC 822的扩展BNF表示法中,内容类型头字段值定义如下:内容类型:=类型/子类型*[;参数][…]类型、子类型和参数名称不区分大小写。例如,TEXT、TEXT和TEXT都是等效的。请报告您发送的完整响应标题,因为可能存在其他问题,例如设置content-disposition.com,这会产生完全无效的标题。我猜Chrome和Firefox在标题方面比IE宽松得多。但是“text/html”是标头设置的默认内容类型,因此只需删除所有参数即可。或者甚至只是标头“text/html”是默认内容类型。它不起作用,因为您没有遵循文档:-