2010-05-13 4 views
1

HI. J'ai créé deux fichiers 'hello.pl' et 'hello.cgi' avec le code ci-dessous.Dois-je utiliser .pl ou .cgi pour les fichiers de script Web Perl?

#!/usr/bin/perl 
print "Content-type:text/html\n\n"; 
print "hello world"; 

je peux voir la page via les deux http://www.mydomain.com/cgi-bin/hello.pl et http://www.mydomain.com/cgi-bin/hello.cgi. Lequel est le plus logique dans Perl web dev?

BTW, le répertoire de 'cgi-bin' créé par mon serveur VPS, Ai-je besoin d'un contact avec mon support VPS pour le supprimer ou le conserver comme ce style d'URL? Peut-être http://www.mydomain.com/perDev /hello.cgi est le meilleur?

+1

Rien à voir avec, choisissez celui qui vous plaît le plus. – Space

Répondre

9

L'extension que vous utilisez n'a pas vraiment d'importance. Vous pouvez configurer votre serveur pour qu'il traite .potato comme un fichier CGI s'il vous plaît.

Ma préférence personnelle serait d'utiliser .cgi ou même pas d'extension du tout si cela va fonctionner. La raison principale en est que vous donnez un peu moins d'informations à quiconque voudrait attaquer votre script. C'est une chose mineure - ne comptez pas sur ce par mesure de sécurité. C'est une précaution de sécurité pour la soupe au poulet (elle ne peut pas faire de mal). L'avantage de ne pas utiliser .pl est si faible que vous pouvez décider d'utiliser .pl pour le simple fait qu'il est plus court, et ce serait encore une bonne raison pour moi.

Faites ce que vous voulez.

+0

Salut Daotoad, Merci beaucoup. –

+0

Une raison supplémentaire pour éviter les fichiers '.pl' est qu'il s'agit de l'extension standard utilisée pour les fichiers de langue polonais pour la négociation automatique de contenu basée sur le langage sous Apache. C'est-à-dire que si vous avez les fichiers 'example.html' et' example.html.pl', Apache peut envoyer 'example.html.pl' pour polir les navigateurs de langue et' example.html' pour les autres navigateurs. –

+0

C'est faux. La configuration par défaut d'Apache depuis au moins 2001 assigne l'extension '.po' à Polish pour éviter exactement le conflit que vous décrivez. – daxim

2

Toutes choses étant égales par ailleurs, je l'appellerais .cgi pour rappeler au codeur qu'il ne s'agit pas d'un autre script Perl et qu'il a des exigences de robustesse particulières à CGI.

3

Les miens sont généralement nommés .fcgi (j'utilise FastCGI plutôt que CGI), mais l'utilisateur ne voit jamais le nom du programme grâce à un peu de réécriture d'URL dans .htaccess. Il est beaucoup plus agréable pour les utilisateurs d'aller simplement au http://mysite.com/ au lieu de http://mysite.com/mycode.fcgi, après tout.

Fonctionnellement, c'est identique quelle que soit l'extension. Comme dit daotoad, le serveur peut être configuré pour reconnaître que quelque chose est un exécutable CGI basé sur l'extension de fichier que vous choisissez, ou par son emplacement dans le système de fichiers (les sites utilisant un répertoire/cgi-bin/traiteront généralement tout ce répertoire comme un programme CGI indépendamment du nom ou de l'extension), ou même des fichiers individuellement nommés sans motif apparent ou connexion entre eux.

+0

Merci pour le FastCIG INFO. –

8

Si possible, essayez de ne pas utiliser d'extensions, ou même d'exposer des noms de fichiers réels si vous le pouvez. Vous pouvez le faire avec des règles apache mod_rewrite, ou un système de répartition avec votre cadre (Dancer, CGI::Application, Catalyst, etc.). Certains le font parce qu'ils obscurcissent un peu les choses et peuvent fournir un peu plus de sécurité (mais pas beaucoup, voire pas du tout). Mais je le fais parce que cela ne vous lie pas à une implémentation particulière. Ce qui commence comme de simples scripts peut se transformer en une application complète et les gens s'énervent si vous invalidez leurs signets. Donc, en choisissant quelque chose d'abstrait, vous avez plus de liberté pour faire ce que vous voulez dans le futur.

+0

Je veux aussi apprendre le framework web Perl comme Catalyst, mais basé sur mon sens de PHP Php Web, je voudrais apprendre les connaissances et les compétences de base de script .cgi de base, puis transférer à l'application web Perl sur le framework. Je vous remercie. –

+1

@NanoHE S'il vous plaît arrêter d'utiliser le vieux CGI.pm sale. Utilisez plutôt un moteur web moderne et propre tel que [Dancer] (http://www.perldancer.org/) ou [Mojolicious] (http://mojolicious.org/). – dolmen

2

N'utilisez aucune extension ou quelque chose de générique comme .cgi.

daotoad a raison de dire que le .pl est une fuite de sécurité mineure, mais plus important encore, il lie vos URL à votre langage d'implémentation actuel. Les URL doivent être un emplacement permanent pour les informations. Si vous décidez ultérieurement de réécrire votre application plus tard dans une autre langue, vous serez bloqué avec l'extension .pl héritée.

La même chose s'applique pour les programmes de ligne de commande. Il suffit d'écrire command et non command.pl et laisser la ligne #! faire son travail. Après tout, nous ne courons pas ls.c.

mpeters est également correct dans la mesure où vous devez éviter de lier vos URL à des fichiers réels, non pas tant à des fins de sécurité que pour faire de l'URL une interface permanente. Par exemple, vous voulez http://example.com/login pas http://example.com/cgi-bin/login.

+0

Merci beaucoup. –

Questions connexes