Apa itu Hypertext Transfer Protocol (HTTP)?
HTTP ialah satu protokol yang digunakan oleh pelayar internet (Web Browser) dan juga pelayan web (Web Server) untuk saling berhubung dalam mencapai matlamat mendapatkan sesuatu bahan atau maklumat (resources) yang diminta (requested) oleh pengguna (user/requestor/client) daripada pelayan (server). HTTP ada dua jenis iaitu HTTP dan HTTPS (HTTP Secured). HTTP beroperasi secara lazimnya pada port 80 (utama) atau 8080 (alternatif) tetapi tidak terhad kepada dua port tersebut. HTTPS pula beroperasi pada port 443 (utama) atau 8433 (alternatif) dan juga tidak terhad kepada dua port tersebut.
Cara Kerja
Cara kerja atau cara HTTP berfungsi adalah umpama pelanggan dan kaunter informasi di mall. Pelanggan (sebagai client/user) akan bertanya kepada kaunter informasi (server) dan setelah itu kaunter informasi akan menjawab (reply). Jadi HTTP mesti ada request dan ada response. Seperti kaunter informasi, server tidak akan terhegeh-hegeh mencari client untuk memberita sesuatu info tetapi sebaliknya client yang perlu minta daripada server terlebih dahulu. Faham analogi tersebut?
HTTP beroperasi secara 'stateless'; iaitu server akan lupa siapa anda (client) pada request seterusnya. Ini bermakna setiap kali client cuba request maklumat yang sulit, setiap kali itu juga client perlu mengesahkan identiti. Proses ini dipanggil authentication. Serupa dengan memiliki sebuah kad akses untuk masuk ke dalam sebuah bangunan. Akan tetapi dengan memiliki kad akses tidak bermakna anda boleh buka semua pintu di dalam bangunan tersebut. Anda terhad kepada beberapa pintu sahaja. Adalah tidak selamat jika anda ke sebuah hotel tapi kad akses anda dan tetamu yang lain boleh buka setiap pintu bilik tanpa had kan? Konsep had ini pula dipanggil sebagai authorization. Saya tidak akan sentuh bab authentication dan authorization dalam pos ini tapi mungkin pada pos yang akan datang.
HTTPS dan SSL
HTTP berkomunikasi secara terang tanpa selindung atau kita panggil sebagai 'plaintext'. Hal ini berbahaya kerana orang lain boleh membaca kandungan request dan response antara client dengan server. Adalah malang jika kandungan request/response tersebut mengandungi maklumat sensitif seperti kata laluan (password) atau maklumat peribadi. Request/Response boleh dihidu oleh pegodam dengan menggunakan perkakas-perkakas godaman yang mudah dimuat turun di internet.
Maka dengan itu lahirlah HTTPS yang mana mesej komunikasi telah diubah menggunakan bahasa yang tidak boleh difahami oleh manusia. Contohnya anda menghantar 'I love you' tetapi mesej tersebut diubah kepada 'x hgds wsd' yang mana orang lain tidak faham. Ini dinamakan sebagai 'encryption'. Encryption telah digunakan zaman peperangan oleh tentera untuk mengantar mesej tanpa musuh ketahui kandungannya jika mesej tersebut berjaya dirampas. Encryption ini tercapai untuk HTTP melalui satu sijil yang dipanggil Secured Socket Layer (SSL) atau Transport Layer Security (TLS). Sijil SSL adalah formula yang digunakan komputer untuk encrypt (tukar kepada bahasa yang tidak difahami) atau decrypt (tukar kepada bahasa yang difahami) sesuatu mesej.
Struktur Mesej
Mesej HTTP terbahagi kepada 2 bahagian iaitu Header dan Body. Kedua-dua request dan response mempunyai 2 bahagian. Header mengandungi informasi berkaitan sesuatu request atau response. Analogi mudahnya umpama maklumat pada sampul surat iaitu mengandungi maklumat siapa yang request (IP Address), kepada siapa atau server mana perlu mesej tersebut dihantar, versi HTTP, waktu request dibuat, jenis bahasa dan kaedah request. Itu adalah maklumat asas. Maklumat lain boleh juga diselitkan. Bahagian seterusnya ialah Body. Body ini umpama kertas di dalam sampul; iaitu mesej yang hendak dihantar.
Jenis Bahasa (Body)
Terdapat pelbagai bahasa komputer yang digunakan dalam komunikasi HTTP. Bahasa paling banyak dan biasa digunakan ialah 'text/plain'. Bahasa ini hanyalah teks biasa dan digunakan oleh Hypertext Markup Language (HTML). Contoh bahasa lain adalah seperti 'image/jpeg' iaitu sejenis fail gambar, 'application/pdf' untuk dokumen PDF, 'application/javascript' untuk fail JavaScript, 'application/json' untuk fail JSON atau biasa digunakan sebagai bahasa untuk Application Programming Interface (API) iaitu sejenis bahasa untuk dua aplikasi (application) bercakap antara satu sama lain dan banyak lagi.
Jenis Kaedah
Terdapat beberapa kaedah request yang wujud tetapi yang paling popular ialah GET dan POST. Antara kaedah yang wujud adalah:
- GET - Biasa digunakan untuk mendapatkan sesuatu tanpa memberi maklumat tambahan seperti melayari blog.
- POST - Digunakan untuk menghantar maklumat seperti borang pendaftaran atau login.
- PUT - Digunakan untuk mengubah sesuatu maklumat yang telah wujud pada server
- DELETE - Digunakan untuk mengarahkan server untuk padam sesuatu rekod
Kod Status Response
Dalam header request mempunyai jenis kaedah request. Bagi response pula digantikan dengan kod status response. Kod status HTTP terbahagi kepada beberapa bahagian iaitu antaranya 200, 300, 400 dan 500.
2xx Success
Kluster kod status 200 ini digunakan sebagai isyarat bahawa sesuatu request itu dalam dipenuhi dengan sempurna. Contohnya jika client membuat request untuk melihat halaman utama dimensikini.xyz, kod 200 akan diberikan jika server berjaya menemukan kandungan page tersebut untuk dihantar sebagai response. Kod kluster 200 yang lain kebiasaannya digunakan oleh API. Kod kluster 200 antaranya:
- 200 (OK) - Jika maklumat/fail/resource dijumpai
- 201 (Created) - Jika maklumat yang dihantar berjaya disimpan pada server
- 202 (Accepted) - Mesej atau arahan berjaya diterima oleh server tetapi server tidak menghantar terus resources yang diminta. Biasa digunakan jika waktu memproses dijangka mengambil masa yang lama
- 204 (No Content) - Response tidak mengandungi sebarang mesej. Biasa digunakan jika request jenis DELETE berjaya dipenuhi
3xx Redirection
Kluster kod status 300 ini digunakan untuk memberitahu client bahawa sesuatu resource atau fail telah berpindah lokasi atau alamat dan client perlu membuat request daripada lokasi baru. Pelayar web anda biasanya akan membuat request baru tersebut untuk anda tanpa perlu anda secara sendiri membuat request. Antara kod yang ada bawah kluster ini ialah:
- 301 (Moved Permenantly) - Kod untuk memberitahu pelayar web anda bahawa perpindahan lokasi tersebut adalah kekal dan pelayar web akan simpan alamat baru ke dalam cache supaya ia tidak lagi membuat request pada alamat lama pada masa akan datang
- 301 (Found) - Resource yang anda request wujud tetapi telah berpindah sementara. Kod ini juga digunakan untuk berpindah halaman setelah sesuatu request berjaya seperti daripada page login ke page dashboard
4xx Client Error
Kluster kod status 400 ini digunakan sebagai isyarat bahawa sesuatu request dapat dibaca oleh server tetapi gagal disempurnakan kerana kekangan tertentu seperti resource yang diminta tidak dijumpai (kod 404) atau anda tidak memberikan maklumat yang mencukupi untuk server mencari resource tersebut. Kod yang wujud bawah kluster ini antaranya:
- 400 (Bad Request) - Maklumat yang anda beri dapat dibaca tetapi tidak difahami atau terkurang seperti nama variable salah eja atau ada salah syntax atau kekurangan variable
- 401 (Unauthorized) - Status yang diberikan jika anda cuba meminta resource yang anda tidak diizinkan kerana memerlukan anda authenticate atau login terlebih dahulu (authentication)
- 403 (Forbidden) - Status yang diberikan jika anda cuba meminta resource yang anda tidak diizinkan untuk baca kerana ID anda tiada kebenaran untuk akses fail tersebut (authorization)
- 404 (Not Found) - Resource yang diminta tidak ditemui
5xx Server Error
Kluster kod status 500 digunakan untuk memaklumkan anda selaku requestor bahawa request anda tidak dapat disempurnakan kerana ada masalah pada server walaupun request anda adalah sah atau valid. Kebiasaanya kod ini diberikan jika server gagal untuk execute sesuatu arahan atau skrip untuk memproses request anda. Berikut adalah antara kod yang wujud bawah kluster ini:
- 500 (Internal Server Error) - Server gagal memproses request anda kerana masalah aplikasi di server tidak dapat menjalankan arahan atau rutin dengan lengkap
- 502 (Bad Gateway) - Kebiasaannya diberikan oleh server proxy kerana response yang tidak valid daripada server destinasi
- 503 (Service Unavailable) - Server menolak untuk melayan request anda kerana tidak boleh tampung trafik request yang banyak atau aplikasi sedang tergendala seperti di dalam mod selenggara contohnya
Akhirnya kita telah sampai ke penghujung artikel ini. Semoga artikel ini bermanfaat untuk anda dalam memahami serba sedikit berkaitan apa itu HTTP. Sebarang soalan boleh diajukan melalui borang ini: