Langsung ke konten utama

Membuat Web Server Statis Menggunakan Bahasa Pemrograman Python

    Pada gambar diatas merupakan ilustrasi yang dapat membantu pemahaman kalian bagaimana model komunikasi antara server dengan client dan protokol RFC yang terkait dengan komunikasi data tersebut. 
    Nah RFC atau kepanjangan dari Request For Comments itu serial dokumen protokol standar yang diterbitkan oleh lembaga-lembaga internasional dibawah naungan Intenet Society (ISOC). Sampai saat ini, ISOC itu sendiri masih dibawah koordinasi World Wide Web Consortium (W3C). Dimana W3C itu sendiri, sampai artikel ini saya tulis masih dikepalai oleh Tim Berners-Lee, sang penemu www itu sendiri.
    Dokumen pertama kali yang ditulis oleh tim penyunting RFC tercatat mulai tahun 1968. Dan dari tahun 1968 itu dokumen RFC terus bertambah sampai sekarang. Jumlah dokumen RFC sejak tahun 1968 sampai tahun 2020 tercatat sudah mencapai angka 8.715 dokumen. Delapan ribu dokumen protokol standar inilah yang akhirnya dipatuhi oleh berbagai macam kalangan, terutama pengembang aplikasi world wide web dan aplikasi yang berjalan diatas protokol internet lainnya.
    Muncul pertanyaan. Kalau kita mau mengembangkan aplikasi web, apakah kita harus memahami semua dokumen RFC yang berjumlah 8.715 itu? Ya tentu saja tidak. Untuk bisa mengembangkan aplikasi web, maka kita hanya perlu memahami dam mampu mengimplementasikan setidaknya 4 standar RFC saja, yaitu :

  1. RFC 2068 yang membahas tentang standar Hyper Text Transfer Protocol version 1.1. Didalam RFC ini, ada bagian khusus yang membahas tentang format data permintaan (request) yaitu pada section 5. Sedangkan section 6 membahas tentang format data status yang dikirim (response status) dari server (httpd) ke client (browser)
  2. RFC 1928 yang membahas tentang komunikasi data dengan memanfaatkan socket
  3. RFC 1738 yang membahasa tentang penentuan alamat jaringan (Domain Name), nama berkas (file) dan data yang dikemas dengan istilah Uniform Resource Locator atau disingkat URL.
  4. RFC 1866 yang membahas tentang format dokumen yang dikirim dari server ke client. Dimana format dokumen ini menggunakan protokol standar Hyper Text Markup Language atau disingkay (HTML).
Langkah-Langkah Membuat Web Server Statis dengan Python
Sebelum memulai, pastikan komputer Anda telah terinstall Python. Untuk memeriksa apakah Python sudah terinstal maka lakukan perintah berikut di terminal :

python -V

Jika Python sudah terinstall maka akan muncul tulisan versi Python. Berikut ini contohnya :

Silahkan buat folder dan file dengan nama-nama seperti gambar dibawah ini. Saya tidak akan membahas bagaimana membuat file HTML dan CSS seperti yang berada di folder htdocs ya. Karena file-file HTML dan CSS ini sudah saya bahas di artikel yang terpisah. Disini saya akan fokus untuk membahas implementasi algoritma web server menggunakan bahasa pemrograman python. Jadi nanti yang akan saya sajikan adalah bagaimana membuat program webserver.py berdasarkan algoritma.

Source code selengkapnya dari algoritma, terlihat seperti gambar berikut ini.

  1. import socket
  2. import os
  3. import mimetypes
  4.  
  5. def tcp_server():
  6.        SERVER_HOST = '127.0.0.1'
  7.        SERVER_PORT = 8080
  8.        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9.        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  10.        server_socket.bind((SERVER_HOST, SERVER_PORT))
  11.        server_socket.listen()
  12.        print('Listen on http://127.0.0.1:8080')
  13.        while True:
  14.              client_connection, client_address = server_socket.accept()
  15.              #request
  16.              request = client_connection.recv(1024).decode()
  17.              #handle request
  18.              response = handle_request(request)
  19.              #response
  20.              client_connection.sendall(response)
  21.              client_connection.close()
  22.        server_socket.close()
  23.  
  24. def handle_request(request):
  25.        request_message = str(request).split("\r\n")
  26.        request_line = request_message[0]
  27.        words = request_line.split()
  28.        method = words[0]
  29.        uri = words[1].strip("/")
  30.        http_version = words[2]
  31.        if(uri == ''):
  32.              uri = 'index.html'
  33.        if(method == 'GET'):
  34.              response = handle_get(uri, http_version)
  35.        return response
  36.  
  37. def handle_get(uri, http_version):
  38.        uri = "htdocs/%s"%(uri)
  39.        if os.path.exists(uri) and not os.path.isdir(uri):
  40.              response_line = b''.join([http_version.encode(), b'200', b'OK'])
  41.              content_type = mimetypes.guess_type(uri)[0] or 'text/html'
  42.              entity_header = b''.join([b'Content-type: ', content_type.encode()])
  43.              file = open(uri, 'rb')
  44.              message_body = file.read()
  45.              file.close()
  46.        else :
  47.              response_line = b''.join([http_version.encode(), b'404', b'Not Found'])
  48.              entity_header = b'Content-Type: text/html'
  49.              message_body = b'<h1>404 Not Found</h1>'
  50.        crlf = b'\r\n'
  51.        response = b''.join([response_line, crlf, entity_header, crlf, crlf, message_body])
  52.        return response
  53.  
  54. if __name__ == "__main__":
  55.        tcp_server()

Kalau program webserver itu dijalankan, maka pada terminal akan muncul tampilan seperti ini

Coba sekarang buka browser anda, kemudian pada browser ketikkan alamat URL : http://127.0.0.1:8080 atau http://localhost:8080 maka seharusnya pada browaer anda akan tampil seperti ini.

Oke, sampai dengan pembahasan metode GET (handle GET) seperti ilustrasi diatas, maka kita sudah bisa menangani website statis. Artinya website statis ini model arus informasinya hanya satu arah yaitu informasi dari server ke client saja. Disini pengguna (user) hanya bisa menerima data, tanpa bisa melakukan interaksi lebih jauh lagi. Contoh interaksi yang dimaksud misalnya pengguna (user) mengirimkan data nama pengguna, password, dan data-data lainnya. Pada bagian selanjutnya, akan saya bahas mengenai implementasi method POST, PUT, DELETE dsb.

Komentar

Postingan populer dari blog ini

Membuat Halaman CheckOut Dengan NextJS & Bulma

Apa itu Next.js?  Next.js merupakan sebuah React framework yang dibentuk buat mengatasi kasus client-side rendering yang dimiliki React. Sebuah halaman website yang dibentuk memakai React ‘terasa ringan’ lantaran tampilan website sangat interaktif.  Selain itu, ketika data berubah, React menggunakan efisien akan mengupdate bagian menurut halaman website yang memang perlu diupdate tanpa perlu reload satu halaman penuh.  Untuk menerima itu seluruh, client wajib load seluruh file JavaScript sebelum konten halaman ditampilkan. apabila file JS relatif akbar maka ketika yang diperlukan buat load pertama kali pula sebagai lebih lama.  Masalah lain menurut client-side rendering merupakan SEO, terdapat kemungkinan web crawler berusaha mengindex halaman yang belum terselesaikan dirender sepenuhnya (lantaran ketika load yang lama). Dan menduga web tadi blank.  Kedua kasus diatas bisa diselesaikan menggunakan teknik pre-rendering. Yaitu halaman HTML dan file JavaScript pada...

Membuat Halaman Profil Konsumen Dengan NextJS & Bulma

Apa itu Next.js?  Next.js merupakan sebuah React framework yang dibentuk buat mengatasi kasus client-side rendering yang dimiliki React. Sebuah halaman website yang dibentuk memakai React ‘terasa ringan’ lantaran tampilan website sangat interaktif.  Selain itu, ketika data berubah, React menggunakan efisien akan mengupdate bagian menurut halaman website yang memang perlu diupdate tanpa perlu reload satu halaman penuh.  Untuk menerima itu seluruh, client wajib load seluruh file JavaScript sebelum konten halaman ditampilkan. apabila file JS relatif akbar maka ketika yang diperlukan buat load pertama kali pula sebagai lebih lama.  Masalah lain menurut client-side rendering merupakan SEO, terdapat kemungkinan web crawler berusaha mengindex halaman yang belum terselesaikan dirender sepenuhnya (lantaran ketika load yang lama). Dan menduga web tadi blank.  Kedua kasus diatas bisa diselesaikan menggunakan teknik pre-rendering. Yaitu halaman HTML dan file JavaScript pada...

Fitur - fitur Yang Diinginkan Untuk Platform Wlijo

Sebelum membahas tentang fitur yang inginkan untuk platform Wlijo, anda perlu tahu apa sih Wlijo itu?           Wlijo merupakan layanan belanja sayur yang mudah dengan kualitas sayur fresh, higenis, dan tahan lama. Serta menjamin kesehatan dan kesejahtraan konsumen.Untuk mendukung hal tersebut maka kami akan menjalin kerjasama ke petani, pedagang sayur keliling dan tetap, agar dapat berkembang  secara luas, karena itu kami memanfaatkan system yang  sudah berjalan untuk menjangkau konsumen dengan inovasi digital, sehingga bisa berjalan lebih efektif serta mampu membuat lapangan pekerjaan baru bagi masyarakat banyuwangi. Fitur - fitur yang diinginkan Fitur yang diinginkan kedepannya untuk platform wlijo terbagi menjadi 3 yaitu : Fitur untuk konsumen Fitur pembukuan keuangan bagi wlijo F itur stok produk F itur pembayaran COD F itur informasi produk, manfaat dan cara penyimpanan F itur grade produk Tampilan Fitur Bagi Konsumen Fitur wishlist  F...