我目前有一个运行Apache的内部网站。它提供一些cgi脚本网页(perl代码)。最近在Firefox和Chrome中,它开始显示HTML代码的纯文本版本。在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配置,或者它的内容类型是否缺少。
答案 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进行问题排查。