![]()
Sekitar bulan Maret tahun 1989, Berners-Lee mengajukan proposal tentang sistem manajemen informasi kepada dewan manajemen CERN. Didalam proposal itu Berners-Lee mencantumkan istilah "web", dimana salah satu inovasi yang diajukan dalam proposal itu adalah manajemen tautan (link) antar dokumen. Manajemen tautan (link) tersebut sampai saat ini masih masuk dalam standar HTML. Saat ini tautan itu diistilahkan hypertext reference atau disingkat href.
Pada tanggal 12 November 1990, Berners-Lee bersama rekannya Robert Cailliau, menulis proposal resmi yang berisi tentang pengembangan proyek hypertext yang dinamakan "WordWideWeb". Pada tahun 1990 ini Berners-Lee berhasil mengembangkan 3 teknologi dasar yang menjadi basis web yaitu : 1. Unique Device Identification (UDI), dimana kelak dikemudian hari berubah menjadi Uniform Resource Locator (URL) dan Uniform Resource Identifier (URI). 2. Standar dokumen dengan format HyperText Markup Language (HTML) 3. HyperText Transfer Protocol (HTTP). Nah didalam HyperText Transfer Protocol (HTTP) inilah tercantum berbagai macam aturan seperti misalnya aturan aplikasi layanan (service) HTTP Server, aturan aplikasi HTTP Client, beserta aturan-aturan lain yang memuat format data yang dikirim oleh Server dan Client tersebut. Waktu itu service HTTP Server ini dinamakan HyperText Transfer Protocol Daemon atau disingkat httpd. Sedangkan HTTP Client dinamakan WordWideWeb. Saat ini HTTP Server atau httpd lebih dikenal dengan istilah Web Server, 10sedangkan WordWideWeb atau HTTP Client lebih dikenal dengan istilah web browser.
Secara garis besar, badan yang mengatur standar jaringan internet dan aplikasi yang berjalan diatasnya ada 2 badan besar, yaitu Institute of Electric and Electrical Engineering (IEEE) dan Internet Society (ISOC) beserta sub-sub bagian dibawahnya. IEEE adalah lembaga internasional yang khusus membahas lapisan fisik jaringan. Dimana lapisan fisik jaringan internet ini berhubungan erat dengan teknologi dan komponen elektronika. Sedangkan ISOC itu lebih banyak mengatur masalah aturan data yang mengalir di internet, pengalamatan jaringan internet dan perangkat lunak (software) yang berjalan di atas jaringan internet.
Diatas sempat saya singgung sedikit mengenai RFC. Di bagian Ini akan saya perjelas lagi tentang apa itu RFC. Diatas sudah saya sampaikan, bahwa perkembangan World Wide Web (www) sejak dari tahun 1990 sampai saat ini sudah sangat pesat. Tentu dari pekembangan ini sangat terkait dengan berbagai macam kepentingan kan ya? Mulai dari kepentingan sekedar saling berbagi informasi, kepentingan bisnis, sampai kepentingan yang menyangkut kedaulatan negara. Nah bayangkan kalau World Wide Web itu tidak diatur, apa yang terjadi? Sangat mungkin akan memunculkan konflik sosial, sampai dengan monopoli bisnis. Bahkan akibat dari monopoli bisnis tadi bisa merembet ke konflik antar negara. Untuk itulah badan-badan internasional dan konsorsium internasional perlu dibentuk, untuk mengatur standarisasi teknologinya itu tadi.
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).
Agar mudah untuk dipahami, gambar dibawah ini merupakan ilustrasi bagaimana model komunikasi antara server dengan client dan protokol RFC yangterkait dengan komunikasi data tersebut.
RFC 1928 : TCP Connection Protokol HTTP/1.1
RFC 1738 : Uniform Resource Locator (URL)
HTTP adalah seperti berikut ini.
[http|https]://www.[host:port]/path/filename?param-1=data-1¶m-n=data-n
● https://www.google.com/index.html
● https://www.facebook.com/index.php?groups=2920223131408328
● https://www.google.com/search?q=rfc+2068&sxsrf=ALeKk00
● http://www.localhost:8080/index.html
RFC 2068-Section 5 : Request Message (Pesan Permintaan)
GET /index.html HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="90", "Google
Chrome";v="90"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/90.0.4430.85 Safari/537.36
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/web
p,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
message) yang ditetapkan pada RFC 2616 terdapat 2 bagian pokok yaitu :
1. Request-line
2. Request Header Fields
RFC 2068-Section 6 : Response
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()







Tidak ada komentar:
Posting Komentar