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 :
- 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)
- RFC 1928 yang membahas tentang komunikasi data dengan memanfaatkan socket
- 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.
- 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
- import socket
- import os
- import mimetypes
- def tcp_server():
- SERVER_HOST = '127.0.0.1'
- SERVER_PORT = 8080
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- server_socket.bind((SERVER_HOST, SERVER_PORT))
- server_socket.listen()
- print('Listen on http://127.0.0.1:8080')
- while True:
- client_connection, client_address = server_socket.accept()
- #request
- request = client_connection.recv(1024).decode()
- #handle request
- response = handle_request(request)
- #response
- client_connection.sendall(response)
- client_connection.close()
- server_socket.close()
- def handle_request(request):
- request_message = str(request).split("\r\n")
- request_line = request_message[0]
- words = request_line.split()
- method = words[0]
- uri = words[1].strip("/")
- http_version = words[2]
- if(uri == ''):
- uri = 'index.html'
- if(method == 'GET'):
- response = handle_get(uri, http_version)
- return response
- def handle_get(uri, http_version):
- uri = "htdocs/%s"%(uri)
- if os.path.exists(uri) and not os.path.isdir(uri):
- response_line = b''.join([http_version.encode(), b'200', b'OK'])
- content_type = mimetypes.guess_type(uri)[0] or 'text/html'
- entity_header = b''.join([b'Content-type: ', content_type.encode()])
- file = open(uri, 'rb')
- message_body = file.read()
- file.close()
- else :
- response_line = b''.join([http_version.encode(), b'404', b'Not Found'])
- entity_header = b'Content-Type: text/html'
- message_body = b'<h1>404 Not Found</h1>'
- crlf = b'\r\n'
- response = b''.join([response_line, crlf, entity_header, crlf, crlf, message_body])
- return response
- if __name__ == "__main__":
- tcp_server()






Komentar
Posting Komentar