Ini adalah pemahaman saya bahwa bahasa pemrograman tujuan umum apa pun dapat digunakan untuk pengembangan sisi-server suatu situs web.
Apakah saya benar berpikir bahwa server hanya perlu beberapa jenis antarmuka seperti CGI untuk membuat server dan bahasa pemrograman bekerja bersama? Jika demikian maka mengapa beberapa bahasa pemrograman (seperti php) lebih populer daripada yang lain?
programming-languages
web-development
web
Chris Dance
sumber
sumber
Jawaban:
Pada hari-hari awal web, CGI memang satu-satunya cara (praktis) untuk memiliki konten dinamis (Anda bisa membuat pipa bernama file - dan itu digunakan di hari-hari sebelum cgi, tapi itu tidak praktis sama sekali).
CGI bekerja dengan menempelkan banyak informasi di lingkungan proses yang bercabang dan kemudian dieksekusi (dan mungkin beberapa di stdin) dan kemudian mengambil apa yang keluar dari stdout dan meludahkannya kembali ke pemohon.
Ini tidak peduli sedikit pun tentang apa itu bahasa implementasi. Memang, saya menulis CGI awal saya kembali pada hari di C atau C ++. Agak menyakitkan. Saya kemudian belajar beberapa perl di awal 90-an dan itu jauh lebih menyakitkan.
Ini berfungsi, sampai batas tertentu. Masalahnya adalah skala. Setiap permintaan CGI adalah fork dan exec dari suatu proses. Ribuan permintaan berarti ribuan proses. Itu benar - benar tidak berfungsi dengan baik.
Solusi untuk ini adalah menghapus forking dan executing dengan memindahkannya ke utas di server web itu sendiri, atau mengirimkan permintaan ke proses lain yang menangani permintaan tanpa perlu fork dan exec. mod_perl adalah salah satu alat untuk melakukan ini (sebuah plugin memindahkan perl ke apache). Php (akhir 90-an) juga melakukan ini dengan menerapkan bahasa sebagai plugin di server web itu sendiri daripada sesuatu yang bercabang dan melebihi. Ini menjadi sangat populer karena itu seperti perl (yang merupakan bahasa pemrograman web dominan awal) dan bisa mengungguli perl cgis. Masih ada sedikit momentum dari periode waktu ini di pertengahan 90-an - sebelum server aplikasi yang lebih kelas mulai mengambil alih dengan bahasa yang lebih formal di belakang mereka. Jika Anda menggali,
Ini membawa kita ke server aplikasi di mana utas internal muncul (atau pendekatan lain - ini bukan kasus untuk semuanya) untuk menangani permintaan daripada seluruh proses baru - yang dapat membantu dengan skala. Sebagai proses eksternal ini dapat dilihat dengan FastCGI dan kemudian menjadi lazim dengan server aplikasi lain. Perhatikan bahwa dengan ini garis antara server aplikasi dan server web menjadi agak buram - banyak server aplikasi dapat berfungsi ganda sebagai server web, meskipun tidak dioptimalkan untuk menangani IO file statis dengan cara yang seperti server web tradisional.
Server aplikasi generik juga telah membuka jalan ke solusi di mana alih-alih server aplikasi generik , Anda memiliki aplikasi itu sendiri yang menjalankan server web tertanam atau seluruh penyebaran. Dalam situasi seperti itu seseorang tidak menyebarkan aplikasi web pada server aplikasi - itu hanya menjalankan sendiri dan menangani permintaan. Sekali lagi, tujuan dari model ini adalah untuk menghindari harga yang mahal dari peluncuran contoh aplikasi yang baru dan alih-alih menangani permintaan di dalam aplikasi dengan benang yang lebih ringan atau pendekatan serupa.
Inilah masalahnya - semua solusi kurang dalam beberapa cara, bentuk, atau bentuk. CGI, sementara mudah memiliki masalah serius dengan skala. Plugin di server web terikat ke server web itu sendiri (apache vs nginx vs IIS vs ...) dan kehilangan fungsionalitas umum bahasa tersebut. Microsoft memiliki parade teknologi sendiri yang ingin dipromosikan. Dan jika Anda tahu satu bahasa, tidakkah Anda lebih suka pemrograman di dalamnya daripada memiliki bahasa yang berbeda di berbagai bagian tumpukan (javascript di klien dan Node.js)?
Jadi, Anda dapat hari ini. Beberapa orang bekerja di tumpukan Java (dengan scala dan clojure menjadi tidak biasa). Lainnya di tumpukan C #. Lainnya di tumpukan JavaScript. Ada banyak tumpukan php di luar sana. Banyak sekali python. Anda masih dapat menemukan beberapa tumpukan perl di luar sana (dan jika Anda melihat beberapa situs volume rendah, Anda masih akan menemukan CGI). Dengan komputasi awan, Google juga mempromosikan Go sebagai bahasa web sisi server yang layak.
Masing-masing memiliki kelebihan, kekurangan, kerangka dan servernya. Popularitas relatif pasang surut ini seiring dengan perubahan teknologi di sekitarnya. Mereka melakukan berbagai hal dengan baik.
sumber
Ya, bahasa pemrograman umum apa pun dapat berfungsi untuk menulis bagian sisi server dari situs web.
Namun, kualitas bahasa pemrograman, dalam hal ini seperti dalam hal lain, biasanya hanya satu dari banyak faktor yang berkontribusi terhadap popularitasnya.
Misalnya, saya rasa PHP menjadi populer untuk situs web karena:
<?php
tag di awal, dan, asalkan PHP diinstal, Anda memiliki situs web dinamis! Sisa alur kerja sama persis dengan untuk situs web statis;Dan begitu PHP disebarkan secara luas, menjadi menarik untuk menulis aplikasi web yang lebih serius dalam PHP untuk mendapatkan keuntungan dari perluasan yang luas.
Untuk mengatakannya dengan cara yang lebih umum: adopsi bahasa sering kali merupakan jawaban atas pertanyaan-pertanyaan ini:
sumber
Hampir. Anda memerlukan server web yang memiliki beberapa jenis perangkat lunak untuk memungkinkannya menanggapi permintaan HTTP juga.
Pikirkan tentang bagaimana halaman statis disajikan. Server mengambil permintaan HTTP, menemukan dokumen yang diminta dari sistem file berdasarkan pada konfigurasi server HTTP, dan mengembalikan halaman statis.
CGI memperluas konsep ini dengan memungkinkan Anda untuk menunjuk folder cgi-bin pada sistem file tempat executable atau skrip dapat disimpan. Ketika Anda mengakses suatu program melalui CGI, server HTTP menjalankan proses atau skrip dan meneruskan output standar ke klien daripada hanya melayani dokumen statis.
Struktur CGI yang lama tidak menskalakan permintaan dalam jumlah besar. Bahasa pemrograman dan kerangka kerja yang berbeda untuk web ada karena alasan yang berbeda, dan masing-masing melakukan hal yang berbeda dengan baik. PHP sama populernya dengan alasan historis, karena PHP adalah salah satu solusi mudah dan murah pertama untuk melayani halaman dinamis tanpa menggunakan CGI dan memiliki dukungan hosting yang luas. ASP populer di kalangan Microsoft karena memungkinkan pengembang VB untuk mengalihkan keterampilan mereka ke web. ASP.NET (Formulir Web) membuatnya sangat mudah bagi pengembang Windows Forms, banyak di antaranya adalah coders VB, untuk beralih ke web.
sumber
Saat browser membuat permintaan HTTP, tampilannya seperti ini:
... di mana server harus mengirim respons yang terlihat seperti ini:
Setiap kode yang berjalan pada server yang mendengarkan untuk permintaan pada soket TCP, membaca permintaan, dan balasan dengan respon yang tepat akan cukup. Salah satu cara bodoh adalah dengan mengeluarkan respons kalengan kepada siapa pun yang terhubung ke TCP port 80, menggunakan skrip shell:
Tentu saja, teknik itu nyaris tidak sesuai dengan protokol HTTP .
Sebuah langkah maju dari respons kalengan adalah program Python sederhana ini, yang menggunakan
http.server
pustaka dalam Python 3.Server HTTP dapat ditulis dalam bahasa apa pun; itu hanya sebuah contoh. Jelas, contoh ini sangat sederhana. Payloadnya dikodekan secara keras - program sepenuhnya mengabaikan isi permintaan - URL, string kueri, tajuk Bahasa Terima, dll. Anda dapat menambahkan kode untuk menghasilkan respons yang bermakna berdasarkan permintaan, tetapi kemudian kode akan menjadi sangat kompleks. Selain itu, programmer lebih suka fokus menulis aplikasi web, tidak perlu khawatir tentang detail bagaimana menangani permintaan HTTP.
Solusi yang lebih tepat adalah dengan menggunakan server web, seperti Apache HTTPD , IIS , atau nginx . Server web hanyalah sebuah program yang mendengarkan pada soket TCP yang relevan, menerima beberapa permintaan (mungkin secara bersamaan), dan memutuskan bagaimana menghasilkan respons berdasarkan URL permintaan, tajuk, dan aturan lainnya. Idealnya, banyak detail, seperti SSL, kontrol akses, dan batasan sumber daya dijaga melalui konfigurasi alih-alih kode. Sebagian besar waktu, server web akan merumuskan respons yang hanya terdiri dari konten dari file dalam sistem file.
Untuk konten dinamis, server web dapat dikonfigurasi untuk mengeksekusi beberapa kode untuk menghasilkan respons. Salah satu mekanisme untuk melakukan itu adalah dengan CGI - server menetapkan beberapa variabel lingkungan berdasarkan permintaan, menjalankan program, dan menyalin hasilnya ke soket TCP. Solusi yang sedikit lebih canggih adalah dengan memiliki modul yang menambahkan dukungan ke server web untuk memanggil kode dalam bahasa pemrograman lain (mis. Mod_php for Apache ). Namun pilihan lain adalah untuk menulis server web dalam bahasa yang sama dengan aplikasi web, dalam hal ini pengiriman permintaan hanyalah panggilan fungsi. Itu adalah kasus dengan node.js dan mesin servlet Java seperti Apache Tomcat .
Pilihan teknologi benar-benar terserah Anda, dan tergantung pada bahasa pemrograman yang Anda inginkan, lingkungan hosting yang tersedia untuk Anda, persyaratan kinerja, pendapat populer, dan mode yang lewat. CGI, misalnya, belum disukai akhir-akhir ini, karena kebutuhan untuk meluncurkan program eksternal membatasi skalabilitas.
sumber
Server web adalah program yang ditulis dalam bahasa pemrograman apa pun yang menangani "lalu lintas web" melalui soket yang mematuhi standar / protokol tingkat aplikasi (HTTP, dll). Sebagian besar bahasa pemrograman menawarkan Anda untuk membuat soket.
Tidak perlu memiliki program server khusus dan program aplikasi Anda - keduanya bisa sama (mengabaikan masalah terkait kinerja).
sumber
Anda dapat menggunakan beberapa pustaka server HTTP , misalnya libonion , bahkan dalam program Anda yang dikodekan dalam C (atau C ++, lihat juga Wt ). Ada juga beberapa pustaka klien HTTP (mis. Libcurl )
Anda dapat menggunakan perpustakaan HTTP lain, misalnya ocsigen & ocamlnet untuk OCaml .
Ada beberapa bahasa khusus Web (di luar PHP), misalnya Opa , HOP , Kaya , dll ... (baik HOP & Opa dapat dengan mudah menggabungkan perhitungan sisi-server dan sisi-browser, tetapi Anda harus melakukannya dengan susah payah dan manual di PHP, secara eksplisit menggunakan teknik AJAX dan pengkodean tangan beberapa Javascript untuk browser. Sebaliknya, HOP, Opa, Ocsigen dapat menghasilkan Javascript tersebut).
Anda juga dapat menggunakan teknologi FASTCGI untuk menambahkan beberapa layanan dinamis ke beberapa server web ... FASTCGI lebih baik daripada CGI biasa yang memulai proses baru untuk setiap permintaan HTTP yang masuk, sementara aplikasi FASTCGI dapat melayani banyak permintaan HTTP dalam proses yang sama. BTW, PHP dapat dikonfigurasi untuk berfungsi sebagai aplikasi FASTCGI.
C.Queinnec mengamati bahwa penelusuran web dan kelanjutan terkait secara signifikan.
PS. Saya tidak suka PHP, dan saya percaya bahwa popularitasnya memiliki alasan historis dan sosial (tidak terutama yang teknis). Memang PHP tersebar luas sebelum AJAX menjadi banyak digunakan, dan lebih tua dari HOP atau Opa (atau Ocsigen).
sumber