Sebuah web server HTTP/1.1 sederhana yang dibangun dari dasar (from scratch) menggunakan Python, dengan fokus pada pemahaman fundamental protokol jaringan dan socket programming. Proyek ini dirancang sebagai studi kasus untuk mempelajari cara kerja web server dalam menangani koneksi TCP dan me-render halaman web statis.
Proyek ini merupakan pengembangan mandiri yang diadaptasi dari tugas besar mata kuliah Jaringan Komputer.
Di era framework modern seperti Django dan Flask, sering kali kita melupakan apa yang sebenarnya terjadi di balik layar. Proyek ini adalah sebuah perjalanan kembali ke dasar: membangun sebuah server fungsional yang hanya berbekal modul standar Python, yaitu socket
dan threading
.
Tujuannya adalah untuk mendemonstrasikan dan memahami secara mendalam konsep-konsep inti dalam jaringan komputer, mulai dari pembuatan socket TCP, siklus request-response HTTP, hingga penanganan klien secara simultan.
Proyek ini secara praktis mengimplementasikan beberapa konsep fundamental jaringan komputer:
- Socket Programming: Membuka, mengikat (bind), mendengarkan (listen), dan menerima (accept) koneksi pada level TCP menggunakan modul
socket
. - Protokol HTTP/1.1: Mem-parsing request
GET
dari klien (seperti browser) dan membangunresponse
HTTP yang valid (Status-Line, Headers, Body) sesuai standar. - Multithreading: Menggunakan modul
threading
untuk mengelola beberapa koneksi klien secara bersamaan, mencegah server berhenti melayani saat menangani satu permintaan yang lama. - Arsitektur Perangkat Lunak Modular: Merancang server dengan struktur yang bersih dan terpisah antara logika inti (parsing, response building), request handlers, dan konfigurasi.
- MIME Types: Mengenali tipe file yang diminta (HTML, CSS, PNG, dll.) dan menyertakan header
Content-Type
yang benar agar browser dapat me-render-nya dengan tepat.
- Penanganan Koneksi Multithreaded: Mampu melayani banyak klien secara simultan tanpa blocking.
- Parsing HTTP GET Request: Mengekstrak metode, path, dan versi HTTP dari raw request.
- Penyajian File Statis: Menyajikan file HTML, CSS, JavaScript, dan gambar dari direktori
static/
. - Penanganan Error: Mengirimkan response
404 Not Found
jika file tidak ada dan500 Internal Server Error
jika terjadi kesalahan di sisi server. - Logging Profesional: Mencatat aktivitas server (koneksi masuk, request, dan error) dengan format yang jelas untuk kemudahan debugging.
- Struktur Proyek Skalabel: Kode diorganisir ke dalam modul-modul yang memiliki tanggung jawab tunggal.
MiniWebServer/
├── static/
│ ├── index.html
│ └── style.css
├── server/
│ ├── core/
│ │ ├── request.py # Kelas untuk parsing request
│ │ └── response.py # Kelas untuk membangun response
│ ├── handlers/
│ │ └── static_handler.py # Logika untuk menyajikan file statis
│ ├── utils/
│ │ └── logger.py # Konfigurasi logging
│ └── main.py # Kelas Server utama dan loop koneksi
├── config.py # Konfigurasi HOST dan PORT
├── run_server.py # Titik masuk untuk menjalankan server
└── README.md
Proyek ini tidak memerlukan dependensi eksternal, hanya Python 3.
-
Clone Repositori
git clone https://github.com/RozhakDev/MiniWebServer.git cd MiniWebServer
-
Jalankan Server Buka terminal di direktori utama proyek dan jalankan perintah:
python run_server.py
Server akan berjalan dan menampilkan log di terminal:
2025-07-08 18:51:29 - INFO - Server akan berjalan di 127.0.0.1:6789 2025-07-08 18:51:30 - INFO - Server berhasil berjalan, menunggu koneksi...
-
Uji Coba Buka browser favorit Anda dan kunjungi alamat berikut:
- Halaman Utama:
http://127.0.0.1:6789
- Halaman Tidak Ditemukan:
http://127.0.0.1:6789/halaman-yang-tidak-ada
- Halaman Utama:
Proyek ini dilisensikan di bawah Lisensi MIT.