Selasa, 02 September 2014

Memahami Cara Kerja Web dan HTTP

Pendahuluan

Aplikasi berbasis web telah berkembang pesat pada masa ini menjadikan orang awam paling tidak mengetahui bagaimana web itu bekerja.

Berbasis web bukan berarti hanya website, berbasis web artinya dapat terkoneksi melalui protokol web untuk mengakses data, mengendalikan sesuatu dari jarak jauh.

Telpon pintar, Internet banking, rumah pintar, GPS, komputasi awan (cloud computing) merupakan hanya beberapa aplikatif dari teknologi web. Sehingga ini mematahkan paradigma aplikasi desktop lebih hebat dari aplikasi web. Dan tulisan pendahuluan ini ingin mengedukasi sebagian besar orang yang berpandangan bahwa lulusan IT hanya dapat membuat website, benerin printer dan benerin komputer.

Jika melihat konsep penerapan web lebih jauh, teknologi informasi secara umum dan web secara lebih khusus  adalah enabler bagi sebuah organisasi baik itu pemerintahan, organisasi non profit dan organisasi profit. Dikatakan enabler karena web/teknologi informasi merupakan inti bisnis sehingga tanpa web/teknologi informasi tidak dapat berjalan. Bandingkan dengan pada masa lalu dimana web/sistem informasi yang hanya merupakan sebuah support bagi sebuah organisasi.

Kita sebagai pribadi secara tidak sadar telah tergantung kepada teknologi web. Memposting status di media sosial, meng-upload photo pada iCloud, mencari berita tentang photo leak artis Hollywood yang sedang marak diberitakan dan lain sebagainya.

Dengan teknologi web, organisasi dapat membangun business intelligence, decission support system (DSS), sistem pakar, Service Oriented Architecture (SOA) dan lain sebagainya.

Tulisan diatas cukup menggambarkan bahwa mengetahui teknologi web cukup penting pada kehidupan dewasa ini. Tetapi saya tidaka akan menulis topik yang sangat luas seperti diatas. Tulisan berikut akan lebih spesifik membahas bagaimana cara kerja web dan HTTP.


Gambaran sedernhana dari kehidupan sehari-hari

Seseorang sebut saja namanya Tumbuang duduk memegang sebuah telpon pintar. Si Tumbuang ingin membuat curhat pada website sobatcurhat.com. Si Tumbuang mengetikkan sebuah Uniform Resource Locator (URL) pada browser mobile-nya.

Gambaran diatas cukup sederhana, tetapi bagaimana itu bekerja dapat dituliskan dengan sebuah tulisan yang relatif panjang seperti berikut.


Bagaimana proses yang terjadi?

Dengan gambaran yang sederhana tersebut, proses yang terjadi adalah URL mencari alamat yang ada pada internet. Bisa saja alamat tersebut ada pada belahan bumi yang jauh disana, berbeda benua, berbeda negara atau dimana saja.

Seperti namanya Uniform Resource Locator; komputer/browser client akan me-request resource yang dapat saja berupa tulisan, gambar atau suara dimana saja resource tersebut berada.

Secara teknikal, client browser akan me-request data yang ada pada web server dan web server akan memberikan response terhadap request tersebut.

Secara sederhana, sebenarnya setiap komputer adalah sebuah server. Komputer yang diberikan/di-set/diinstall sebagai web server akan dapat memberikan layanan web dan bisa berfungsi sebagai web server.

Request dan response diberikan oleh sebuah protokol yang dinamanakan dengan HyperText Transfer Protocol (HTTP) dan HTTP merupakan protokol stateles.

HTTP meminta komunikasi yang dengan bahasa yang sama antara browser dan web server sehingga mereka saling mengerti.

Berikut proses yang terjadi secara teknikal ketika browser mengakses sebuah URL;

1. Parsing URL

URL mempunyai format seperti berikut: [protocol]://[domain]/[request-URI]

URL yang di-request sebenarnya bukan hanya berasal dari browser. URL yang di-request dapat saja dilakukan melalui terminal atau robot. Alat untuk me-request URL ini disebut sebagai user agent sehingga kedepannya saya akan menyebut user agent untuk jenis ini.

Jika pada format diatas, protocol saya tuliskan sebagai array []. Ini saya maksudkan karena masih ada protokol lain yang bisa bekerja dengan format tersebut seperti FTP, JDBC:MySQL atau yang lainnya yang tidak dibahas disini.


2. HTTP Request

User agent akan mengirimkan request pada web server. Metode yang paling banyak digunakan pada tahapan ini adalah GET.

Method yang lain pada HTTP Request adalah HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT (HTTPS) dan PATCH.

Berikut adalah sebuah contoh request yang dilakukan.


Terlihat diatas; Accept, Accept-Encoding, Cookie dll merupakan properti yang dapat ditambahkan ketikan melakukan request oleh user agent.

Jika ingin mengirimkan request melalui terminal, dapat menggunakan perintah curl seperti berikut;

$ curl -d "nama=Nitza" \
> -d "alamat=Jakarta" \
> server.com


3. HTTP Response

Pada tahap ini, user agent akan menerima response dari web server. Response tersebut biasanya akan terlihat seperti berikut;



Diatas, terlihat jenis response yang diterima melalui Content-Type sehingga user agent yang biasanya adalah browser mem-parsing dan render sesuai dengan Content-Type tersebut.

Ragam dari Content-Type dapat dilihat pada link berikut http://en.wikipedia.org/wiki/Internet_media_type

Jika menggunakan user agent dengan jenis terminal, berikut syntax untuk melihat response HTTP yang di-request;

$ curl -I http://domain.com

Jika tidak menggunakan opsi -I, maka semua response akan ditampilkan pada terminal/user agent.

Saya rasa pembahsan tentang curl cukup menarik karena dapat mengirimkan parameter, merequest dan melihat response tanpa bantuan user interface. Tidak adanya bantuan user interface dan berjalan pada terminal menjadikannya lebih seksi karena bisa dipanggil melalui java runtime dan bash script sehingga kita bisa membuat aplikasi baru untuk keperluan spesifik; bisa saja sebagai tester aplikasi (umumnya dipakai untuk lingkungan java) dan hacking**.


Apa itu stateless protokol?

HTTP merupakan stateless protokol yang artinya HTTP tidak mengingat data yang kita kirim melalui browser. Setiap kali pengguna me-request HTTP, web server akan me-response dengan data baru setiap waktu diminta sehingga HTTP request dan response selalu dibuat per-akses. Dalam arti sederhana, tidak ada hubungan antara request & response yang lama dengan request & response yang baru.

Jadi, bagaimana cara menyajikan data terkait jika HTTP tidak mengingat data yang kita minta sebelumnya?

Untuk menjawab ini, saya berikan ilustrasi sebagai berikut; ketika Anda berkungjung ke website penjualan misalnya e-bay, maka setiap kali Anda melihat barang, data barang tersebut dijadikan barang favorit oleh aplikasi untuk ditampilkan kembali sebagai suggest untuk pilihan yang akan Anda beli.

Proses tersebut terjadi, karena pada user agent diciptakan sebuah session dan cookie sehingga web server dapat mengingat hal tersebut dan memberikan data yang berhubungan dengan request sebelumnya. Session dan cookie adalah key-value pair data pada web server. Penjelasan lebih lanjut tentang session dan cookie mungkin akan dijabarkan pada tulisan berikutnya


Jika Anda pernah melihat kode error pada sebuah halaman, maka Anda cukup beruntung mengetahuinya karena kode response jarang ditampilkan jika kode tersebut untuk iformasi, sukses dan redirection. Berikut adalah code status respon secara garis besar;
1xx ditujukan sebagai informasi
2xx sukses. Jika Anda sering bermain dengan Ajax, biasanya success response ini sering digunakan dengan kode sukses 200.
3xx redirection
4xx client error
5xx server error


Penutup

Dengan mengetahui cara kerja website bagi awam dapat mengetahui apa itu sebenarnya web sehingga menambah pengetahuan akan web dan bisa saja mendapat ide baru sebagai enabler bagi pribadi sendiri atau organisasinya. Sebuah contoh penerapan web adalah sebuah aplikasi Android yang saya buat untuk kepentingan keluarga yang juga saya share pada goole play sehingga ribuan orang bisa memakainya.

Sendangkan dengan mengetahui cara kerja website/http ini bagi para web developer, dapat mengerti tentang trouble shooting dan  membuat arsitektur yang lebih baik pada sistem yang sedang dibuat. (keamanan, ketangguhan dll).


Sumber
http://www.w3.org/Protocols/rfc1341/4_Content-Type.html
http://en.wikipedia.org/wiki/Internet_media_type
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes


*) Request dan response sebaiknya tidak dijadikan Bahasa Indonesia pada tulisan ini
**) Hacking sebenarnya tidak untuk tujuan jahat. Tetapi kata ini sering disalah artikan sehinga menjadi konotasi yang negatif.