CGI adalah Common Gateway Interface. Seperti namanya, itu adalah antarmuka gateway "umum" untuk semuanya. Sangat sepele dan naif dari namanya. Saya merasa bahwa saya memahami ini dan saya merasakan ini setiap kali saya menemukan kata ini. Tapi sejujurnya, saya tidak. Saya masih bingung.
Saya seorang programmer PHP dengan pengalaman pengembangan web.
permintaan pengguna (klien) untuk halaman ---> server web (-> penerjemah PHP tertanam) ----> Skrip sisi server (PHP) ---> Server MySQL.
Sekarang katakan PHP Script saya dapat mengambil hasil dari server MySQL & server MATLAB & beberapa server lain.
Jadi, sekarang PHP Script adalah CGI? Karena antarmuka untuk server web antara & Semua server lain? Saya tidak tahu Kadang-kadang mereka memanggil CGI, teknologi & lain kali mereka menyebut CGI program atau server lain.
Apa itu CGI?
Apa masalahnya
/cgi-bin/*.cgi
? Ada apa dengan ini? Saya tidak tahu untuk apacgi-bin
direktori ini di server. Saya tidak tahu mengapa mereka memiliki ekstensi * .cgi.Mengapa Perl selalu menghalanginya. CGI & Perl (bahasa). Saya juga tidak tahu ada apa dengan keduanya. Hampir sepanjang waktu saya terus mendengar keduanya dalam kombinasi "CGI & Perl". Buku ini adalah contoh bagus Pemrograman CGI dengan Perl lainnya . Mengapa tidak "Pemrograman CGI dengan PHP / JSP / ASP"? Saya tidak pernah melihat hal-hal seperti itu.
Pemrograman CGI di C , banyak membingungkan saya. " dalam C " ?? Serius ?? Saya tidak tahu harus berkata apa. Saya hanya bingung. " dalam C " ?? Ini mengubah segalanya. Program perlu dikompilasi dan dieksekusi. Ini sepenuhnya mengubah pandangan saya tentang pemrograman web. Kapan saya mengkompilasi? Bagaimana program dijalankan (karena itu akan menjadi kode mesin, sehingga harus dijalankan sebagai proses independen). Bagaimana cara berkomunikasi dengan server web? IPC? dan berinteraksi dengan semua server (dalam contoh saya MATLAB & MySQL) menggunakan pemrograman soket? Saya tersesat!!
Orang mengatakan bahwa CGI sudah usang dan tidak digunakan lagi. Apakah begitu? Apa itu pembaruan terbaru?
Suatu kali, saya mengalami situasi di mana saya harus memberikan akses permintaan HTTP PUT ke server web (Apache HTTPD). Ini punggung yang panjang. Jadi, sejauh yang saya ingat inilah yang saya lakukan:
Mengedit file konfigurasi Apache HTTPD untuk memberi tahu webserver agar meneruskan semua permintaan PUT HTTP ke beberapa
put.php
(saya harus menulis skrip PHP ini)Terapkan put.php untuk menangani permintaan (simpan file ke lokasi yang disebutkan)
Orang-orang mengatakan bahwa saya menulis Skrip CGI. Serius, saya tidak tahu apa yang mereka bicarakan.
- Apakah saya benar-benar menulis Script CGI?
Saya harap Anda mengerti apa kebingungan saya. (Karena saya sendiri tidak tahu di mana saya bingung). Saya meminta kalian untuk menjaga jawaban Anda sesederhana mungkin. Saya benar-benar tidak dapat memahami terminologi teknis yang bagus. Setidaknya tidak dalam hal ini.
EDIT:
Saya menemukan tutorial yang luar biasa ini "Pemrograman CGI Sederhana!" - CGI Tutorial , yang menjelaskan konsep-konsep dengan cara sesederhana mungkin. Setelah membaca artikel ini, Anda mungkin ingin membaca Memulai dengan Pemrograman CGI dalam C untuk menambah pemahaman Anda dengan contoh kode aktual. Saya juga menambahkan tautan ini ke tutorial ini ke artikel Wikipedia: http://en.wikipedia.org/wiki/Common_Gateway_Interface
Jawaban:
CGI adalah antarmuka yang memberi tahu server web bagaimana cara menyampaikan data ke dan dari suatu aplikasi. Lebih khusus lagi, ini menggambarkan bagaimana informasi permintaan diteruskan dalam variabel lingkungan (seperti jenis permintaan, alamat IP jarak jauh), bagaimana badan permintaan diteruskan melalui input standar, dan bagaimana respons disampaikan melalui output standar. Anda dapat merujuk ke spesifikasi CGI untuk detailnya.
Untuk menggunakan gambar Anda:
user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.
Sebagian besar jika tidak semua, webservers dapat dikonfigurasi untuk menjalankan suatu program sebagai 'CGI'. Ini berarti bahwa server web, setelah menerima permintaan, akan meneruskan data ke program tertentu, mengatur beberapa variabel lingkungan dan menyusun parameter melalui input standar dan output standar sehingga program dapat mengetahui di mana dan apa yang harus dicari.
Manfaat utama adalah bahwa Anda dapat menjalankan kode APAPUN yang dapat dieksekusi dari web, mengingat bahwa server web dan program mengetahui cara kerja CGI. Itu sebabnya Anda bisa menulis program web dalam C atau Bash dengan server web yang diaktifkan CGI biasa. Itu, dan sebagian besar lingkungan pemrograman dapat dengan mudah menggunakan input standar, output standar dan variabel lingkungan.
Dalam kasus Anda, Anda kemungkinan besar menggunakan yang lain, khusus untuk PHP, alat komunikasi antara skrip Anda dan server web, ini, seperti yang Anda sebutkan dalam pertanyaan Anda, adalah penerjemah tertanam yang disebut mod_php.
Jadi, jawablah pertanyaan Anda:
Lihat di atas.
Itu adalah tempat tradisional untuk program cgi, banyak webservers datang dengan direktori ini yang sudah dikonfigurasi untuk menjalankan semua binari di sana sebagai program CGI. Ekstensi .cgi menunjukkan suatu executable yang diharapkan dapat bekerja melalui CGI.
Karena Perl kuno (lebih tua dari PHP, JSP, dan ASP yang semuanya muncul ketika CGI sudah tua, Perl ada ketika CGI masih baru) dan menjadi cukup terkenal karena menjadi bahasa yang sangat baik untuk melayani laman web dinamis melalui CGI. Saat ini ada alternatif lain untuk menjalankan Perl di server web, terutama mod_perl .
Anda mengkompilasi executable sekali, server web mengeksekusi program dan meneruskan data dalam permintaan ke program dan mengeluarkan respons yang diterima. CGI menetapkan bahwa satu instance program akan diluncurkan per setiap permintaan. Inilah sebabnya mengapa CGI tidak efisien dan agak ketinggalan zaman saat ini.
CGI masih digunakan ketika kinerja bukan yang terpenting dan sarana sederhana untuk mengeksekusi kode diperlukan. Itu tidak efisien karena alasan yang dinyatakan sebelumnya dan ada cara yang lebih modern untuk menjalankan program apa pun di lingkungan web. Saat ini yang paling terkenal adalah FastCGI .
sumber
Server side Program
dalam gambar Anda adalah skrip PHP saya. Jadi, saya tidak pernah melakukan pemrograman CGI? Karena saya tidak pernah menulis apa pun yang ada di antara server web & skrip PHP saya. Sial!! ini membunuhku.Sarana bagi server web untuk mendapatkan datanya dari suatu program (bukannya, misalnya, file).
Bukan masalah besar. Itu hanya sebuah konvensi.
Server harus tahu apa yang harus dilakukan dengan file (yaitu memperlakukannya sebagai program untuk mengeksekusi, bukan sesuatu untuk hanya melayani). Memiliki ekstensi .html memberitahukannya untuk menggunakan tipe konten teks / html. Memiliki ekstensi .cgi memberitahukannya untuk menjalankannya sebagai program.
Menyimpan executable di direktori terpisah memberikan perlindungan tambahan terhadap eksekusi file yang salah dan / atau menayangkan program CGI sebagai data mentah jika server mengalami kesalahan konfigurasi.
Tidak. Perl hanya besar dan populer pada saat yang sama dengan CGI.
Saya belum pernah menggunakan Perl CGI selama bertahun-tahun. Saya menggunakan mod_perl untuk waktu yang lama, dan cenderung ke PSGI / Plack dengan FastCGI hari ini.
CGI tidak terlalu efisien. Metode yang lebih baik untuk berbicara dengan program dari webserver datang pada waktu yang sama dengan PHP. JSP dan ASP adalah metode yang berbeda untuk berbicara dengan program.
Itu adalah bahasa pemrograman, mengapa tidak?
Itu tidak harus dijalankan sebagai proses independen (Anda dapat menulis modul Apache dalam C), tetapi seluruh konsep CGI adalah bahwa ia meluncurkan proses eksternal.
STDIN / STDOUT dan variabel lingkungan - sebagaimana didefinisikan dalam spesifikasi CGI.
Menggunakan metode apa pun yang Anda suka dan didukung.
CGI tidak efisien, lambat dan sederhana. Ini jarang digunakan, ketika digunakan, itu karena sederhana. Jika kinerja bukan masalah besar, maka kesederhanaan sangat berharga.
1.1
sumber
CGI adalah spesifikasi antarmuka antara server web (server HTTP) dan program yang dapat dieksekusi dari beberapa jenis yang menangani permintaan tertentu.
Ini menjelaskan bagaimana sifat-sifat tertentu dari permintaan itu harus dikomunikasikan ke lingkungan program itu dan bagaimana program harus mengkomunikasikan respons kembali ke server dan bagaimana server harus 'menyelesaikan' respons untuk membentuk jawaban yang valid untuk permintaan HTTP asli.
Untuk sementara CGI adalah Draft Internet IETF dan karenanya memiliki tanggal kedaluwarsa. Itu kedaluwarsa tanpa pembaruan sehingga tidak ada 'standar' CGI. Ini sekarang RFC informasi, tetapi sebagai dokumen praktik umum dan bukan standar itu sendiri. rfc3875.txt , rfc3875.html
Program yang mengimplementasikan antarmuka CGI dapat ditulis dalam bahasa apa pun yang dapat dijalankan di mesin target. Mereka harus dapat mengakses variabel lingkungan dan biasanya input standar dan mereka menghasilkan output mereka pada output standar .
Bahasa yang dikompilasi seperti C umumnya digunakan sebagaimana bahasa scripting seperti perl, sering menggunakan perpustakaan untuk membuat mengakses lingkungan CGI lebih mudah.
Salah satu kelemahan besar CGI adalah bahwa program baru dihasilkan untuk setiap permintaan sehingga menjaga status di antara permintaan bisa menjadi masalah kinerja utama. Negara mungkin ditangani dalam cookie atau dikodekan dalam URL, tetapi jika sampai besar itu harus disimpan di tempat lain dan dikunci dari informasi url yang dikodekan atau cookie. Setiap permohonan CGI kemudian harus memuat ulang kondisi tersimpan dari toko di suatu tempat.
Untuk alasan ini, dan untuk antarmuka yang sangat sederhana untuk permintaan dan sesi, lingkungan terintegrasi yang lebih baik antara server web dan aplikasi jauh lebih populer. Lingkungan seperti implementasi php modern dengan apache mengintegrasikan bahasa target jauh lebih baik dengan server web dan menyediakan akses ke objek permintaan dan sesi yang diperlukan untuk melayani permintaan http secara efisien. Mereka menawarkan cara yang jauh lebih mudah dan lebih kaya untuk menulis 'program' untuk menangani permintaan HTTP.
Apakah Anda menulis skrip CGI tergantung pada interpretasi. Tentu saja melakukan pekerjaan satu tetapi jauh lebih biasa untuk menjalankan php sebagai modul di mana antarmuka antara skrip dan server tidak sepenuhnya merupakan antarmuka CGI.
sumber
CGI ditentukan dalam RFC 3875 , meskipun itu adalah kodifikasi "resmi" nanti dari dokumen NCSA asli . Pada dasarnya, CGI mendefinisikan protokol untuk meneruskan data tentang permintaan HTTP dari server web ke program untuk diproses - program apa pun, dalam bahasa apa pun. Pada saat spesifikasi ditulis (1993), sebagian besar server web hanya berisi halaman statis, "aplikasi web" adalah hal yang langka dan baru, sehingga tampak alami untuk memisahkannya dari konten statis "normal", seperti dalam
cgi-bin
direktori terpisah dari konten statis, dan membuatnya berakhir.cgi
.Pada saat ini, di sini juga tidak ada "bahasa pemrograman web" khusus seperti PHP, dan C adalah bahasa pemrograman portabel yang mendominasi - begitu banyak orang menulis skrip CGI mereka dalam C. Tetapi Perl dengan cepat berubah menjadi lebih cocok untuk jenis ini. hal, dan CGI menjadi hampir identik dengan Perl untuk sementara waktu. Lalu datanglah Java Servlets, PHP dan banyak lainnya dan mengambil alih sebagian besar pangsa pasar Perl.
sumber
Lihatlah CGI di Wikipedia. CGI adalah protokol antara server web dan program eksternal atau skrip yang menangani input dan menghasilkan output yang dikirim ke browser.
CGI hanyalah cara bagi server web dan program untuk berkomunikasi, tidak lebih, tidak kurang. Di sini server mengelola koneksi jaringan dan protokol HTTP dan program menangani input dan menghasilkan output yang dikirim ke browser. Skrip CGI pada dasarnya adalah program apa pun yang dapat dijalankan oleh server web dan mengikuti protokol CGI. Dengan demikian program CGI dapat diimplementasikan, misalnya, dalam C. Namun itu sangat jarang, karena C tidak terlalu cocok untuk tugas tersebut.
/cgi-bin/*.cgi
hanyalah sebuah jalur di mana orang biasanya meletakkan skrip CGI mereka. Server web biasanya dikonfigurasi secara default untuk mengambil skrip CGI dari jalur itu.skrip CGI dapat diimplementasikan juga dalam PHP, tetapi semua program PHP bukan skrip CGI. Jika server web telah menyematkan juru bahasa PHP (mis. Mod_php di Apache), maka fase CGI dilewati oleh protokol langsung yang lebih efisien antara server web dan juru bahasa.
Apakah Anda telah mengimplementasikan skrip CGI atau tidak tergantung pada bagaimana skrip Anda dijalankan oleh server web.
sumber
CGI pada dasarnya meneruskan permintaan tersebut ke penerjemah mana pun yang dikonfigurasikan dengan server web - Ini bisa Perl, Python, PHP, Ruby, C, apa saja. Perl adalah yang paling umum di hari itu sebabnya Anda sering melihatnya mengacu pada CGI.
CGI tidak mati. Bahkan sebagian besar perusahaan hosting besar menjalankan PHP sebagai CGI yang bertentangan dengan mod_php karena ia menawarkan konfigurasi tingkat pengguna dan beberapa hal lain sementara itu lebih lambat daripada mod_php. Ruby dan Python juga biasanya dijalankan sebagai CGI. Perbedaan utama di sini adalah modul server berjalan sebagai bagian dari perangkat lunak server sebenarnya - di mana sama halnya dengan CGI yang sepenuhnya berada di luar server, server hanya menggunakan modul CGI untuk menentukan cara mengirim dan menerima data ke juru bahasa luar.
sumber
CGI adalah mekanisme di mana program eksternal dipanggil oleh server web untuk menangani permintaan, dengan variabel lingkungan dan input standar yang digunakan untuk memberi makan data permintaan ke program. Bahasa pasti yang ditulis oleh program eksternal tidak masalah, meskipun lebih mudah untuk menulis program CGI dalam beberapa bahasa dibandingkan yang lain.
Karena skrip CGI perlu menjalankan izin, httpd secara default hanya memungkinkan program CGI di
cgi-bin
direktori dijalankan untuk tujuan keamanan (mungkin sekarang salah arah).Kebanyakan skrip PHP dijalankan melalui proses server web
mod_php
. Ini bukan CGI.CGI lambat karena program (dan interpreter terkait) harus dijalankan sesuai permintaan. Alternatif modern adalah eksekusi tertanam, digunakan oleh mod_php, dan proses yang berjalan lama, digunakan oleh FastCGI. Bahasa yang diberikan mungkin memiliki cara sendiri untuk menerapkan mekanisme tersebut, jadi pastikan untuk bertanya-tanya sebelum beralih ke CGI.
sumber
interpreter
if jika menjalankan php dengan php-fpm?Anda mungkin ingin tahu apa yang bukan CGI, dan jawabannya adalah MODUL untuk server web Anda (jika saya kira Anda runnig Apache). DAN ITULAH PERBEDAAN BESAR, karena CGI perlu dan program eksternal, utas, apa pun untuk instantiate server aplikasi PERL, PHP, C di mana ketika Anda menjalankan sebagai MODUL program itu adalah server web (apache) per-se.
Karena semua ini ada banyak masalah kinerja, keamanan, portabilitas yang ikut berperan. Tapi ada baiknya mengetahui apa yang bukan CGI dulu, untuk memahami apa itu CGI.
sumber
Contoh kehidupan nyata: database rumit yang perlu ditampilkan di situs web. Karena basis data dirancang sekitar tahun 1986 (!), Banyak data dikemas dengan berbagai cara untuk menghemat ruang disk.
Seiring perkembangannya, pengembang tidak lagi bisa menyelesaikan permintaan data yang rumit dalam SQL saja, misalnya karena algorythms pengurutan tidak biasa.
Ada tiga solusi yang masuk akal:
CGI menjalankan skrip Anda di Solusi # 3 dan menampilkan efek ke browser. Anda memiliki kecepatan program yang dikompilasi, fleksibilitas bahasa yang lebih baik daripada SQL, dan tidak perlu menulis plugin ke server SQL. (Sekali lagi, ini adalah contoh khusus untuk SQL dan C)
sumber
Skrip CGI adalah program konsol / shell. Di Windows, saat Anda menggunakan jendela "Prompt Perintah", Anda menjalankan program konsol. Ketika server web mengeksekusi skrip CGI, ia memberikan input ke program konsol / shell menggunakan variabel lingkungan atau "input standar". Input standar seperti mengetik data ke program konsol / shell; dalam hal skrip CGI, server web melakukan pengetikan. Skrip CGI menulis data ke "output standar" dan output itu dikirim ke klien (browser web) sebagai halaman HTML. Output standar seperti output yang Anda lihat di program konsol / shell kecuali server web membacanya dan mengirimkannya.
Skrip CGI dapat dieksekusi dari browser. URI biasanya menyertakan string kueri yang disediakan untuk skrip CGI. Jika metode ini adalah "get" maka string kueri disediakan ke CGI Script dalam variabel lingkungan yang disebut QUERY_STRING. Jika metode ini adalah "posting" maka string kueri disediakan ke CGI Script menggunakan input standar (CGI Script membaca string kueri dari input standar).
Penggunaan awal skrip CGI adalah untuk memproses formulir. Di awal HTML, formulir HTML biasanya memiliki atribut "aksi" dan tombol yang ditunjuk sebagai tombol "kirim". Ketika tombol kirim ditekan, URI yang ditentukan dalam atribut "aksi" akan dikirim ke server dengan data dari formulir yang dikirim sebagai string kueri. Jika "aksi" menentukan skrip CGI maka skrip CGI akan dieksekusi dan kemudian menghasilkan halaman HTML.
RFC 3875 "The Common Gateway Interface (CGI)" mendefinisikan sebagian CGI menggunakan C, seperti yang dikatakan bahwa variabel lingkungan "diakses oleh pustaka rutin getenv () atau variabel environment".
Jika Anda mengembangkan skrip CGI menggunakan C / C ++ dan menggunakan Microsoft Visual Studio untuk melakukannya, Anda akan mengembangkan program konsol.
sumber
CGI adalah program (atau API Web) yang Anda tulis, dan simpan di situs Server Web. CGI adalah file.
File ini duduk dan menunggu di Server Web. Ketika browser klien mengirimkan permintaan ke Server Web untuk mengeksekusi file CGI Anda, Server Web menjalankan file CGI Anda di situs server. Input untuk program CGI ini, jika ada, berasal dari browser klien. Output dari program CGI ini dikirim ke browser.
Bahasa apa yang Anda gunakan untuk menulis program CGI? Posting lain sudah menyebutkan c, java, php, perl, dll.
sumber
Gagasan di balik CGI adalah bahwa suatu program / skrip (baik Perl atau bahkan C) menerima input melalui
STDIN
(data permintaan) dan mengeluarkan data melaluiSTDOUT
(gema,printf
pernyataan).Alasan kebanyakan skrip PHP tidak memenuhi syarat adalah karena skrip tersebut dijalankan di bawah modul PHP Apache.
sumber