Tujuan utama lab ini adalah membuat server web CGI HTTP berdasarkan RFC/1945. Server dibangun di atas pemrograman soket C dan abstraksi yang dipelajari sejauh ini di INET 4021 - pemrograman jaringan.
Selain itu, server harus efisien dalam hal kecepatan dan alokasi sumber daya.
Server kami menggunakan CGI sebagai abstraksi untuk mengambil input dari formulir HTML dan kemudian mengembalikan output. Klien tidak tahu CGI ada di sana tetapi senang ketika menerima tanggapan, terlepas dari siapa asalnya.
Adapun algoritma kami, server mengambil input, kemudian menguraikannya untuk menemukan apakah itu permintaan pos/mendapatkan, kemudian mengirimkan data ke CGI untuk diproses.
/CGI -BIN - Ini berisi file CGI kami yang digunakan untuk menangani posting dan mendapatkan permintaan (di mana server web yang dapat dieksekusi tinggal).
Ketika klien mengirimkan permintaan pos/dapatkan ke server, server akan menghubungi CGI yang dapat dieksekusi untuk menangani permintaan. Penggunaan utama untuk ini adalah untuk memungkinkan executable untuk menangani pekerjaan, sementara server hanya melewatinya dan kemudian dapat menangani permintaan baru. Ini adalah penggunaan alokasi sumber daya yang baik dan membantu mendukung lebih banyak pengguna secara bersamaan.
/conf - Folder konfigurasi berisi file httpd.conf yang merupakan file konfigurasi untuk server. Ini menyatakan jumlah pengguna bersamaan, lokasi konten root, lokasi indeks, dan port yang akan dijalankan.
/Isi - Semua .html, .gif, .jpg (Isi) berada di folder ini. Ketika index.html diterima, ia mengirimkan permintaan untuk semua file ini. File -file ini digunakan untuk membuat halaman web yang ditampilkan di browser klien.
/Log - Folder ini berisi file log untuk semua perintah akses serta kesalahan. Standar keluar akan masuk ke log akses dan semua log kesalahan lainnya masuk ke log kesalahan.
/SRC - Di sinilah semua kode sumber kami berada. Ini pada dasarnya adalah folder tempat server berada.
Index.html - Indeks Direktori WebServer
Untuk mengkompilasi GET dan POST CGI, ubah ke direktori /src . Kompilasi file C. Ini bisa dilakukan dengan
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Untuk menguji server, buka direktori /src . Kompilasi file C dan jalankan. Ini bisa dilakukan oleh:
gcc server.c && ./a.out
Server akan berjalan berdasarkan konten yang ditentukan dalam file konfigurasi. Jika tidak berubah, terminal akan kembali:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
Sekarang, menggunakan browser web, masukkan "http: // localhost: 8080/". Ini akan memuat file index.html dan menampilkan halaman web. Selain itu, Anda dapat memuat file tertentu dengan melakukan "http: // localhost: 8080/nama file". Jika ada file, itu akan ditampilkan (ditunjukkan di bawah). Kalau tidak, akan ada Error 404 - File Not Found pesan.

Sebelum kita mulai, penting untuk dicatat bahwa ketika server mengirim pesan ke klien browser web, itu didahului oleh header HTTP. Contohnya adalah:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
Ini mengirimkan kesalahan kembali klien HTTP karena file yang diminta tidak dapat ditemukan. Bentuk lain menggunakan "200 OK", "500 kesalahan server internal", dan "501 tidak diimplementasikan", bukan "404 tidak ditemukan", tetapi sebaliknya memiliki formulir yang sama. Anda mengedit baris kedua berdasarkan konten apa yang Anda kirim. Anda kemudian dapat mengirim data setelah dua baris baru.
Ketika klien meminta file, server menerima permintaan GET. Setiap permintaan mungkin memiliki banyak panggilan berulang ke server untuk file tambahan, seperti permintaan index.html untuk memanggil gambar lain. Server kemudian mengirimkan permintaan ke CGI (Common Gateway Interface). Tujuan menggunakan CGI adalah untuk interaksi web yang dinamis, seperti formulir, dengan menambahkan aplikasi backend yang mengambil data (input) dari formulir HTML. Jenis permintaan lain adalah posting. Inilah saat klien mengirim data ke server. Kami akan memberikan contoh masing -masing.
Contoh posting: Jika Anda pergi ke "http: // localhost: 8080/form.htm", Anda dapat mengirim pesan posting ke server. Formulir akan dikirim dan ditangani oleh server web CGI yang dapat dieksekusi sebagai permintaan pos. Formulir contoh kami mengambil dua input kata, mengirimkan formulir dan data ke CGI, dan CGI mengirimkan kembali formulir dan konten (yang merupakan string gabungan). Ini adalah contoh bagaimana CGI menangani permintaan pos.
Dapatkan contoh: Ini adalah saat klien mencoba mendapatkan file dari server. Ini sering terjadi, terutama ketika file <penic.htm> diminta. CGI mencoba menemukan file, jika tidak dapat maka mengirim 404 tidak ditemukan kesalahan, ditemukan di atas, ke klien.
Jika file ditemukan, maka server mengirim permintaan kembali, seperti
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
Potongan teks pertama adalah header HTTP. Konten akan digantikan oleh isi file. Browser kemudian akan menampilkan konten ini. Begitulah cara menangani CGI mendapatkan permintaan.
Dengan asumsi klien adalah pengguna dan admin adalah server ...
Admin - Tujuan dari proyek ini untuk admin adalah untuk melihat cara menangani posting dan mendapatkan permintaan di server web yang dapat dieksekusi. Memprogram server juga membantu memahami cara mengirim header HTTP dan berkomunikasi dengan halaman web, serta menjelajahi file dan mengirimnya ke halaman web.
Pengguna - Tujuan proyek ini untuk pengguna adalah untuk mempelajari cara menavigasi halaman web dan apa arti kesalahan tertentu saat diterima. Misalnya, jika mencoba memuat file dari server yang tidak ada, akan ada 404 file tidak ditemukan kesalahan.