Firefox / Chrome显示来自cgi脚本的纯文本

时间:2010-09-15 18:13:08

标签: html apache firefox google-chrome cgi

我目前有一个运行Apache的内部网站。它提供一些cgi脚本网页(perl代码)。最近在Firefox和Chrome中,它开始显示HT​​ML代码的纯文本版本。在Internet Explorer中,它将cgi文件呈现为HTML,但在Chrome和Firefox中,它呈现为纯文本。

在perl代码中,我有以下内容:

#!/usr/bin/perl --
#
#Prints the HTML MIME TYPE FOR WEB BROWSERS.
print "content-type: text/html\n\n";
print <<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Statistics</title> 

--- OUTPUT SNIPPED ---

HTML

使用firefox的应用程序,我看到响应头是text / plain而不是text / html。

我不确定它是否可能是Apache配置,或者它的内容类型是否缺少。

6 个答案:

答案 0 :(得分:1)

这是一种解决方法,但似乎解决了这个问题:

在apache主机配置文件中,我添加了cgi-bin目录的行:

DefaultType text/html

答案 1 :(得分:0)

尝试添加完整的HTTP标头。而不仅仅是

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

尝试

print "HTTP/1.0 200 OK";
print "content-type: text/html\n\n";

请参阅相关问题:Why do I need to explicitly output the HTTP header for IIS but not Apache?

和参考:http://search.cpan.org/~lds/CGI.pm-3.42/CGI.pm#CREATING_A_STANDARD_HTTP_HEADER

答案 2 :(得分:0)

我遇到了同样的问题。我做了一些改动,似乎对我有用。

  

在输入脚本作为打印内容类型后发出第一个语句。   使用cgi方法'header'来打印内容类型而不是硬编码。

我的$ cgi = CGI-&gt; new; print $ cgi-&gt; header('text / html');

我在Firefox中通过Live HTTP标头观察标头。在此更改之前的所有时间都是text / plain chunk。在这个改变之后,它变成了text / html,这就解决了这个问题。

希望这也适合你。

答案 3 :(得分:0)

“C”需要在“内容文字”

中大写

答案 4 :(得分:0)

我使用bash cgi脚本解决了这个问题:

echo -e -n  "Content-type: text/html\n\n";

答案 5 :(得分:0)

我刚刚遇到这个问题,解决方法是我的代码已经改变:

print """Content-Type: text/html\n\n

为:

    print """
    Content-Type: text/html\n\n

代码已被标记,并添加了额外的换行符 我使用angel_007's method进行问题排查。