HI。我使用下面的代码创建了两个文件'hello.pl'和'hello.cgi'。
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "hello world";
我可以通过两者查看页面 的 http://www.mydomain.com/cgi-bin/hello.pl 和 http://www.mydomain.com/cgi-bin/hello.cgi 。 在Perl web dev中哪一个更有意义?
BTW,我的VPS服务器创建的'cgi-bin'目录,我是否需要与我的VPS支持联系才能将其删除,或者只是保持这种URL样式?也许http://www.mydomain.com/ perDev /hello.cgi更好?
答案 0 :(得分:10)
使用哪种扩展程序并不重要。如果您满意,可以将服务器配置为将.potato
视为CGI文件。
我个人的偏好是使用.cgi
甚至根本没有延伸,如果它可以工作的话。主要原因是您向可能希望攻击您的脚本的任何人提供的信息要少一些。这是一件小事 - 不依赖于此作为安全措施。这是鸡汤安全预防措施(它不会伤害)。
不使用.pl
的好处是如此轻微,以至于您可能决定使用.pl
这个简短的事实,因为它更短,而且就我而言,它仍然是一个足够好的理由关注。
随心所欲。
答案 1 :(得分:9)
如果可能的话,尽量不要使用扩展,甚至暴露真实的文件名。您可以使用apache mod_rewrite
规则或带有框架的调度系统(Dancer,CGI::Application,Catalyst等)执行此操作。
有些人这样做是因为它会使事情变得模糊不清,并且可能会提供一些额外的安全性(但如果有的话则不多)。但我这样做是因为它不会将你束缚到特定的实现。最初的一些简单的脚本可以变成一个完整的应用程序,如果你的书签无效,人们会感到恼火。因此,通过选择抽象的东西,你可以更自由地在将来做你想做的事。
答案 2 :(得分:3)
我的名字通常是.fcgi(我使用的是FastCGI而不是普通的CGI),但由于.htaccess中的一些URL重写,用户永远不会看到该程序的名称。毕竟,用户能够直接转到http://mysite.com/而不是http://mysite.com/mycode.fcgi更好。
从功能上讲,无论扩展如何,它都是相同的。正如daotoad所说,服务器可以配置为根据您选择的任何文件扩展名识别某些内容是CGI可执行文件,或者根据文件系统中的位置来识别(使用/ cgi-bin /目录的站点通常会处理该目录中的所有内容)作为CGI程序,无论名称或扩展名如何),甚至是单独命名的文件,它们之间没有明显的模式或连接。
答案 3 :(得分:2)
在所有其他条件相同的情况下,我将其命名为.cgi
,以提醒编码器它不仅仅是另一个Perl脚本,并且具有CGI特有的健壮性要求。
答案 4 :(得分:2)
使用无扩展名或类似.cgi的通用名称。
daotoad是正确的.pl是一个小的安全漏洞,但更重要的是它将您的URL与您当前的实现语言挂钩。 URL应该是信息的永久位置。如果您将来决定以其他语言重写您的应用程序,您将会遇到遗留的.pl扩展程序。
这同样适用于命令行程序。只需写command
而不是command.pl
,让#!
行完成其工作。毕竟,我们不会运行ls.c
。
mpeters也是正确的,因为您应该避免将URL链接到实际文件,这不仅仅是为了安全目的,而是使URL成为永久接口。例如,您希望http://example.com/login
不是http://example.com/cgi-bin/login
。
答案 5 :(得分:2)
使用无。
Because URLs should be meaningful and technology independent
现代Perl Web框架(例如Dancer或Mojolicious)可以帮助您实现这一目标。