Common Gateway Interface: Διαφορά μεταξύ των αναθεωρήσεων

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
Χωρίς σύνοψη επεξεργασίας
ορισμός, ιστορικό, πως λειτουργεί
Γραμμή 1: Γραμμή 1:
{{πληροφορίες}}Το '''CGI''' (Common Gateway Interface - μεταφράζεται ως "κοινή πυλαία διεπαφή ") είναι μια μέθοδος επέκτασης της λειτουργικότητας του [[Εξυπηρετητής|εξυπηρετητή ιστοσελίδων]] (web server) με την δυνατότητα εκτέλεσης προγραμμάτων ή scripts. Μια κοινή χρήση του CGI είναι π.χ. μια φόρμα παραγγελίας όπου ο χρήστης στέλνει δεδομένα σε ένα CGI script στον εξυπηρετητή, το script επικοινωνεί με τη βάση δεδομένων και επιστρέφει τα αποτελέσματα πίσω στο χρήστη σε μια σελίδα. <ref name="w3_cgi">{{cite web | url=http://www.w3.org/CGI/ | title=CGI: Common Gateway Interface | accessdate=2012-04-12 | publisher=World Wide Web Consortium (W3C)}}</ref>
{{πληροφορίες}}Το '''CGI''' (Common Gateway Interface - μεταφράζεται ως "κοινή διεπαφή πύλης") είναι μια επέκταση της λειτουργικότητας του [[Εξυπηρετητής|εξυπηρετητή ιστοσελίδων]] (web server) η οποία παρέχει τη δυνατότητα εκτέλεσης προγραμμάτων ή [[γλώσσα σεναρίων|σεναρίων]] στον εξυπηρετητή αντί της απλής, αυτόματης αποστολής στατικών σελίδων.<ref name="w3_cgi">{{cite web | url=http://www.w3.org/CGI/ | title=CGI: Common Gateway Interface | accessdate=2012-04-12 | publisher=World Wide Web Consortium (W3C)}}</ref><ref>RFC 3875</ref>


== Ιστορικό ==
Πριν την διάδοση της γλώσσας [[PHP]]/[[MySQL]] για τη δημιουργία δυναμικών ιστοσελίδων, ο προγραμματιστής έπρεπε να προγραμματίσει σε γλώσσα συνήθως [[C (γλώσσα προγραμματισμού)|C]] ή [[Perl]] μικρά προγράμματα ([[γλώσσα σεναρίων|σενάρια]]) τα οποία θα εκτελούνταν από την ιστοσελίδα δια μέσου της διεπαφής CGI. Αυτά τα εκτελέσιμα προγράμματα δεν ήταν εύκολη υπόθεση να σχεδιαστούν-προγραμματιστούν σε σύγκριση με τον μεταγενέστερο σχεδιασμό δυναμικών ιστοσελίδων χρησιμοποιώντας γλώσσες προγραμματισμού όπως η [[PHP]]/[[MySQL]]. <ref name="php_mysql_page1_CGI">{{cite book | title=Learning PHP & MySQL | author=Michele E. Davis, Jon A. Phillips | year=August 2007 | publisher=O' Reilly | pages=[https://archive.org/details/learningphpmysql0000davi/page/1 1] | isbn=978-0-596-51401-3 | url=https://archive.org/details/learningphpmysql0000davi/page/1 }}</ref>
Ο αρχικός σχεδιασμός των εξυπηρετητών ιστοσελίδων ήταν η αποστολή, στον [[Φυλλομετρητής ιστοσελίδων|φυλλομετρητή ιστοσελίδων]], μιας έτοιμης σελίδας που υπήρχε ήδη στο σύστημα. Για παράδειγμα όταν κάποιος ζητήσει το <code><nowiki>http://example.com/index.html</nowiki></code> ο εξυπηρετητής που υπάρχει στο <code>example.com</code> αναζητά τη σελίδα <code>index.html</code> στον κεντρικό του κατάλογο και την επιστρέφει όπως είναι. Αυτό δεν επιτρέπει τη μεταφορά στον φυλλομετρητή τίποτε άλλο παρά στατικά δεδομένα.

Το 1993 το Αμερικάνικο «Εθνικό Κέντρο Εφαρμογών για Υπερυπολογιστές» (NCSA) συζήτησε τη δυνατότητα δημιουργίας μιας διεπαφής η οποία θα μπορούσε να εκτελεί προγράμματα στον εξυπηρετητή ώστε να δημιουργούνται δυναμικές σελίδες. Οι συζητήσεις διενεργήθηκαν σε μία λίστα ηλεκτρονικού ταχυδρομείου και κατέληξαν στη δημιουργία του RFC 3875.
== Πως λειτουργεί ==
'''Αν''' ο εξυπηρετητής έχει ενεργή τη δυνατότητα εκτέλεσης [[γλώσσα σεναρίων|σεναρίων]] CGI τότε οι σελίδες που βρίσκονται στο φάκελο ο οποίος έχει δηλωθεί ως φάκελος για CGI δεν επιστρέφονται αυτούσιες, αλλά λειτουργούν ως μικρά προγράμματα τα οποία «τρέχουν» στον εξυπηρετητή και το περιεχόμενο της εξόδου τους στέλνεται πίσω στον φυλλομετρητή ιστοσελίδων.

Για παράδειγμα το αρχικό <code>php.cgi</code> του Rasmus Lerdorf, πριν στείλει στον φυλλομετρητή ιστοσελίδων το βιογραφικό του σημείωμα, κατέγραφε σε μια λίστα, στον εξυπηρετητή, το ποιος το ζήτησε.


==Παράδειγμα==
==Παράδειγμα==

Έκδοση από την 07:26, 24 Μαρτίου 2020

Πρότυπο:ΠληροφορίεςΤο CGI (Common Gateway Interface - μεταφράζεται ως "κοινή διεπαφή πύλης") είναι μια επέκταση της λειτουργικότητας του εξυπηρετητή ιστοσελίδων (web server) η οποία παρέχει τη δυνατότητα εκτέλεσης προγραμμάτων ή σεναρίων στον εξυπηρετητή αντί της απλής, αυτόματης αποστολής στατικών σελίδων.[1][2]

Ιστορικό

Ο αρχικός σχεδιασμός των εξυπηρετητών ιστοσελίδων ήταν η αποστολή, στον φυλλομετρητή ιστοσελίδων, μιας έτοιμης σελίδας που υπήρχε ήδη στο σύστημα. Για παράδειγμα όταν κάποιος ζητήσει το http://example.com/index.html ο εξυπηρετητής που υπάρχει στο example.com αναζητά τη σελίδα index.html στον κεντρικό του κατάλογο και την επιστρέφει όπως είναι. Αυτό δεν επιτρέπει τη μεταφορά στον φυλλομετρητή τίποτε άλλο παρά στατικά δεδομένα.

Το 1993 το Αμερικάνικο «Εθνικό Κέντρο Εφαρμογών για Υπερυπολογιστές» (NCSA) συζήτησε τη δυνατότητα δημιουργίας μιας διεπαφής η οποία θα μπορούσε να εκτελεί προγράμματα στον εξυπηρετητή ώστε να δημιουργούνται δυναμικές σελίδες. Οι συζητήσεις διενεργήθηκαν σε μία λίστα ηλεκτρονικού ταχυδρομείου και κατέληξαν στη δημιουργία του RFC 3875.

Πως λειτουργεί

Αν ο εξυπηρετητής έχει ενεργή τη δυνατότητα εκτέλεσης σεναρίων CGI τότε οι σελίδες που βρίσκονται στο φάκελο ο οποίος έχει δηλωθεί ως φάκελος για CGI δεν επιστρέφονται αυτούσιες, αλλά λειτουργούν ως μικρά προγράμματα τα οποία «τρέχουν» στον εξυπηρετητή και το περιεχόμενο της εξόδου τους στέλνεται πίσω στον φυλλομετρητή ιστοσελίδων.

Για παράδειγμα το αρχικό php.cgi του Rasmus Lerdorf, πριν στείλει στον φυλλομετρητή ιστοσελίδων το βιογραφικό του σημείωμα, κατέγραφε σε μια λίστα, στον εξυπηρετητή, το ποιος το ζήτησε.

Παράδειγμα

Ο παρακάτω κώδικας CGI σε γλώσσα προγραμματισμού Perl εμφανίζει όλες τις μεταβλητές που έχει ο εξυπηρετητής:

 #!/usr/local/bin/perl
 ##
 ##  printenv—demo CGI πρόγραμμα το οποίο τυπώνει τις μεταβλητές του συστήματος
 ##
 #
 print "Content-type: text/plain\n\n";
 foreach $var (sort(keys(%ENV))) {
   $val = $ENV{$var};
   $val =~ s/\n/\\n/g;
   $val =~ s/"/\\"/g;
   print "${var}=\"${val}\"\n";
 }
  • Για παράδειγμα, εάν ο φυλλομετρητής ζητήσει από τον εξυπηρετητή τις μεταβλητές του συστήματος στο http://example.com/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding, σε ένα 64-bit λειτουργικό Microsoft Windows με εξυπηρετητή να τρέχει κάτω από cygwin επιστρέφονται οι παρακάτω πληροφορίες:
COMSPEC="C:\Windows\system32\cmd.exe"
DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
GATEWAY_INTERFACE="CGI/1.1"
HOME="/home/SYSTEM"
HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7"
HTTP_ACCEPT_ENCODING="gzip, deflate"
HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5"
HTTP_CONNECTION="keep-alive"
HTTP_HOST="example.com"
HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"
PATH="/home/SYSTEM/bin:/bin:/cygdrive/c/progra~2/php:/cygdrive/c/windows/system32:..."
PATHEXT=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
PATH_INFO="/foo/bar"
PATH_TRANSLATED="C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\foo\bar"
QUERY_STRING="var1=value1&var2=with%20percent%20encoding"
REMOTE_ADDR="127.0.0.1"
REMOTE_PORT="63555"
REQUEST_METHOD="GET"
REQUEST_URI="/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding"
SCRIPT_FILENAME="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/printenv.pl"
SCRIPT_NAME="/cgi-bin/printenv.pl"
SERVER_ADDR="127.0.0.1"
SERVER_ADMIN="(server admin's email address)"
SERVER_NAME="127.0.0.1"
SERVER_PORT="80"
SERVER_PROTOCOL="HTTP/1.1"
SERVER_SIGNATURE=""
SERVER_SOFTWARE="Apache/2.2.19 (Win32) PHP/5.2.17"
SYSTEMROOT="C:\Windows"
TERM="cygwin"
WINDIR="C:\Windows"

Από τις μεταβλητές περιβάλλοντος, μπορούμε να δούμε ότι ο φυλλομετρητής είναι ο Firefox ο οποίος τρέχει σε λειτουργικό Windows 7 με επεξεργαστή 64bit. Ο εξυπηρετητής είναι ο Apache και το σύστημα προσομοιώνει το λειτουργικό Unix. Το σενάριο CGI ονομάζεται cgi-bin/printenv.pl.

Παραπομπές

  1. «CGI: Common Gateway Interface». World Wide Web Consortium (W3C). Ανακτήθηκε στις 12 Απριλίου 2012. 
  2. RFC 3875