Cara Kerja Server: Dari Permintaan ke Jawaban, Langkah demi Langkah

Apa sebenarnya yang terjadi di dalam server, di antara saat sebuah permintaan datang dan saat jawaban dikirim balik? Ikuti seluruh perjalanannya — menyimak di sebuah port, menerima koneksi, menangani permintaan, menyusun jawaban — dijelaskan sederhana, lengkap dengan diagram.

Diterbitkan 4 September 202610 menit bacaOleh ACY Partner Indonesia
Cara kerja server — dengar, terima, tangani, balas, dalam sebuah loop
300 × 250Slot Iklan TersediaPasang iklan Anda di sini

Kamu sudah tahu gambaran besar soal server: sebuah komputer yang menjawab permintaan dari komputer lain. Itu bagian apa-nya. Artikel ini soal bagaimana-nya — apa yang benar-benar terjadi di dalam mesin itu, dalam sepersekian detik antara sebuah permintaan muncul dan sebuah jawaban meluncur keluar. Begitu kamu bisa membayangkan loop ini, banyak istilah yang kedengarannya bikin pusing (port, koneksi, request, handler) berhenti terasa misterius.

Kita bakal menyusuri seluruh jalurnya bareng-bareng, pelan-pelan, pakai web server sebagai contoh utama karena jenis inilah yang paling sering ditemui orang lebih dulu. Tapi hampir semua hal di sini berlaku untuk server jenis apa pun. Namanya berganti; bentuknya tetap sama.

Gambaran besar: sebuah loop yang tak pernah berhenti

Telanjangi sebuah server sampai ke tulangnya, dan kamu bakal menemukan satu siklus sederhana yang berulang. Programnya menyala, mengklaim sebuah tempat untuk menyimak, lalu masuk ke sebuah loop: tunggu permintaan, tangani, kirim balik jawaban, tunggu yang berikutnya. Dia melakukan ini selama dia berjalan — yang, di server sungguhan, pada dasarnya selamanya.

   menyala


  ┌─► tunggu permintaan      ◄── (nganggur, menyimak)
  │        │
  │        ▼
  │   baca & pahami
  │        │
  │        ▼
  │   kerjakan tugasnya
  │        │
  │        ▼
  │   kirim balik jawaban
  │        │
  └────────┘   (loop selamanya)

Itu saja. Selebihnya cuma detail yang mengisi kotak-kotak tadi. Server terasa “selalu nyala” justru karena dia menghabiskan sebagian besar hidupnya duduk di kotak paling pertama — menunggu — nyaris tak memakai sumber daya apa pun sampai ada yang datang. Mari kita buka satu per satu langkahnya.

Langkah 1: server menyimak di sebuah port

Sebelum bisa menjawab siapa pun, server harus mengumumkan di mana dia bisa dihubungi. Sebuah mesin punya alamat (alamat IP-nya), tapi satu mesin bisa menjalankan banyak server sekaligus — web server, mail server, database server. Jadi alamat saja tidak cukup; kamu juga butuh port, semacam pintu bernomor di alamat tersebut.

Saat sebuah web server menyala, dia melakukan yang namanya binding ke sebuah port — biasanya port 80 untuk HTTP biasa atau 443 untuk HTTPS. Sejak saat itu, dia menyimak: memberi tahu sistem operasi, “apa pun yang datang ke alamat ini di port ini, serahkan ke saya.”

        satu mesin (IP 203.0.113.10)
   ┌──────────────────────────────────────┐
   │  port 443 → web server   (menyimak)   │
   │  port 25  → mail server  (menyimak)   │
   │  port 5432→ database     (menyimak)   │
   └──────────────────────────────────────┘

Bayangkan alamat IP sebagai alamat jalan sebuah gedung, dan port sebagai nomor ruangan tertentu di dalamnya. Sebuah surat butuh keduanya supaya sampai ke meja yang tepat. Sampai ada permintaan tiba di pintu yang dijaganya, server cuma menunggu — sabar, nganggur, nyaris tak menyentuh tenaga komputernya sama sekali.

Kenapa sebagian port terasa 'standar'

Port tertentu adalah kesepakatan yang disetujui semua orang: 80 untuk HTTP, 443 untuk HTTPS, 22 untuk SSH, 25 untuk email. Bukan sihir — web server boleh menyimak di port mana pun — tapi karena seluruh dunia sepakat soal default ini, browser-mu tahu harus mengetuk port 443 saat kamu mengetik alamat https:// tanpa kamu perlu menyebutkannya sama sekali. Kesepakatan semacam inilah yang membuat komputer orang asing bisa saling bicara tanpa perjanjian sebelumnya.

Langkah 2: sebuah client menyambung

Di suatu titik di jaringan, sebuah client — browser-mu, aplikasi ponsel, atau server lain — memutuskan dia mau sesuatu. Dia menjangkau melintasi internet ke alamat-dan-port yang persis itu, lalu meminta untuk membuka sebuah koneksi.

Untuk sebagian besar lalu lintas web, koneksi ini dibangun di atas TCP, sebuah protokol yang seluruh tugasnya adalah menciptakan saluran dua arah yang andal antara dua mesin. Sebelum data sungguhan mengalir, kedua sisi melakukan tarik-ulur singkat untuk sepakat bahwa keduanya ada dan siap — sering disebut handshake. Begitu itu beres, ada pipa terbuka antara client dan server, dan data bisa mengalir ke dua arah lewat pipa itu.

   CLIENT                              SERVER
      │                                   │
      │  "boleh buka koneksi?"            │
      │ ────────────────────────────────► │
      │                                   │
      │  "boleh, siap"                    │
      │ ◄──────────────────────────────── │
      │                                   │
      │  ═══ koneksi terbuka terbentuk ═══│

Server tidak mengurus ini sendirian — sistem operasi yang mengerjakan banyak hal tingkat rendah, lalu menyerahkan koneksi yang sudah jadi ke program server. Dari sudut pandang server, tadinya dia menunggu, dan kini ada client di ujung saluran. Saatnya menyimak apa yang sebenarnya client mau.

Langkah 3: permintaan datang

Sekarang client mengirim permintaan-nya — sebuah pesan terstruktur yang menyatakan persis apa yang dia incar. Untuk web server, ini adalah permintaan HTTP, dan ternyata cukup gampang dibaca. Kira-kira beginilah yang browser-mu kirim saat kamu membuka sebuah halaman:

GET /about HTTP/1.1
Host: blog.acy-partner.com
User-Agent: Mozilla/5.0 ...
Accept: text/html

Ayo kita bedah, karena tiap bagian punya tugas:

  • GET adalah method — jenis aksi yang diinginkan. GET berarti “kasih saya sesuatu.” Yang lain yang umum adalah POST (ini ada data buat disimpan), PUT, dan DELETE.
  • /about adalah path — hal spesifik mana di server ini yang sedang diminta.
  • HTTP/1.1 adalah versi protokol yang dipakai.
  • Baris-baris di bawahnya adalah header — konteks tambahan: situs mana (Host), client jenis apa (User-Agent), format apa saja yang bisa dia terima, dan seterusnya.

Server membaca pesan ini dan kini tahu tiga hal penting: aksi apa (GET), atas sumber daya mana (/about), dan dengan konteks tambahan apa (header-nya). Itu sudah cukup untuk memutuskan langkah berikutnya.

Langkah 4: server menangani permintaan

Inilah jantungnya — bagian yang benar-benar berbeda dari satu server ke server lain. Menangani permintaan berarti mencari tahu jawaban yang tepat. Caranya sepenuhnya tergantung pada jenis sumber daya yang diminta, dan percabangan tunggal inilah yang membedakan dua kategori besar konten web.

Kalau client meminta sebuah berkas statis — sebuah gambar, sebuah stylesheet, sebuah halaman HTML yang sudah jadi — kerjaannya ringan. Server mencari berkas itu di disk-nya lalu bersiap mengirimnya balik, kurang lebih apa adanya. Cepat dan sederhana.

Kalau client meminta sesuatu yang dinamis — sebuah halaman yang harus disusun segar, seperti dashboard personalmu atau hasil pencarian — server punya kerjaan beneran. Dia menjalankan kode program, dan kode itu mungkin:

  • membaca atau menulis data di sebuah database (mencari seorang pengguna, mengambil daftar artikel),
  • menerapkan aturan bisnis (apakah orang ini boleh melihat ini?),
  • lalu merakit sebuah jawaban yang benar-benar baru saat itu juga, sering dalam bentuk HTML atau JSON.
   permintaan untuk /about


   ┌─────────────────────┐
   │   apakah statis?    │
   └─────────┬───────────┘
       ya    │   tidak
      ┌──────┘   └──────────┐
      ▼                     ▼
  baca sebuah berkas   jalankan kode program
  dari disk            (mungkin query DB,
                        cek aturan, susun
                        halaman saat itu juga)
      └──────────┬──────────┘

          jawaban siap

Ke mana pun jalurnya, tujuannya sama: berakhir dengan sesuatu untuk dikirim balik. Jalur statis cuma sampai lebih cepat karena jawabannya sudah ada; jalur dinamis menghasilkan jawaban yang dibuat khusus untuk permintaan yang persis ini.

Di sinilah 'frontend' dan 'backend' bertemu

Langkah penanganan inilah tempat kode backend tinggal. Saat orang membicarakan “backend” dari sebuah aplikasi web, sebagian besar yang mereka maksud adalah logika program yang berjalan tepat di sini — menerima permintaan, bicara ke database, memutuskan apa yang dikirim. Frontend adalah yang berjalan di browser pengunjung setelah jawaban tiba. Langkah penanganan di server adalah jembatan di antara keduanya: dia mengambil permintaan dari frontend lalu menghasilkan data atau halaman yang akan ditampilkan frontend.

Langkah 5: jawaban dikirim balik

Dengan jawaban di tangan, server membungkusnya sebagai sebuah response lalu mengirimnya balik lewat koneksi terbuka yang sama. Sebuah response HTTP punya bentuk yang mirip dengan permintaannya: satu baris status, beberapa header, lalu kontennya yang sesungguhnya.

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024

<!doctype html>
<html> ... halamannya ... </html>

Baris pertama membawa sebuah status code, angka kecil dengan makna besar. Kamu pasti pernah melihat ini meski tak tahu namanya:

  • 200 OK — sukses, ini yang kamu minta.
  • 404 Not Found — server paham maksudmu, tapi tidak ada apa-apa di path itu.
  • 500 Internal Server Error — server mencoba menanganinya dan ada yang rusak di sisinya.
  • 301/302 — sebuah redirect; yang kamu mau sekarang tinggal di tempat lain.

Sesudah baris status datang header response (ini konten jenis apa, sepanjang apa, petunjuk caching) lalu body-nya — HTML-nya, byte gambarnya, JSON-nya, apa pun yang diminta. Client menerima semua ini, membaca statusnya, lalu bertindak atas kontennya. Untuk sebuah browser, itu berarti melukis halaman di layarmu.

Langkah 6: kembali menunggu (dan melakukan semuanya sekaligus)

Begitu jawaban terkirim, satu pertukaran itu selesai. Server kembali ke puncak loop-nya, siap untuk permintaan berikutnya. Tapi inilah pertanyaan yang sering bikin orang bingung: kalau server terjebak dalam sebuah loop yang menangani satu permintaan dalam satu waktu, bagaimana dia bisa melayani ribuan orang sekaligus?

Jawabannya adalah concurrency — menangani banyak permintaan dalam waktu yang tumpang-tindih, bukan ketat satu-lalu-berikutnya. Server sungguhan tidak membeku menunggu satu permintaan lambat selesai; dia menjuggling banyak permintaan yang sedang berjalan di saat yang sama. Ada beberapa cara umum untuk mewujudkannya:

  • Banyak worker — server menjalankan beberapa salinan handler-nya (sebagai proses atau thread terpisah), jadi beberapa permintaan dikerjakan secara paralel.
  • Sebuah event loop — satu worker yang, alih-alih membeku menunggu database atau disk, menyisihkan permintaan itu lalu mengambil yang lain, menjalin keduanya.
  • Dua-duanya sekaligus — banyak sistem nyata menggabungkan keduanya: beberapa worker, masing-masing menjuggling banyak permintaan.
   permintaan masuk
   ┌──┐ ┌──┐ ┌──┐ ┌──┐
   │R1│ │R2│ │R3│ │R4│
   └─┬┘ └─┬┘ └─┬┘ └─┬┘
     ▼    ▼    ▼    ▼
   ┌────────────────────┐
   │  server menjuggling │  ← semua "berjalan" bareng,
   │  mereka bersamaan   │     tak ada yang menghambat lain
   └────────────────────┘

Kamu tidak perlu menguasai concurrency untuk memahami server — cukup tahu bahwa loop sederhana yang kita gambar di awal tadi, dalam kenyataannya, berjalan berkali-kali lipat secara paralel. Itulah yang membuat satu mesin terasa instan bagi ribuan pengunjung di saat yang sama.

Server hanya secepat langkahnya yang paling lambat

Saat sebuah halaman terasa lambat, biang keroknya hampir selalu ada di dalam langkah penanganan — biasanya sebuah query database yang terlalu lama, atau kode program yang mengerjakan lebih banyak dari yang perlu. Langkah menyimak, menyambung, dan menjawab biasanya cepat. Jadi saat nanti kamu mengoptimalkan sebuah server, kamu akan menghabiskan sebagian besar tenaga pada apa yang terjadi antara permintaan tiba dan jawaban disusun, bukan pada urusan jaringan di sekelilingnya.

Menyatukan seluruh perjalanan

Mari kita putar ulang seluruh perjalanan dalam satu gambar, persis seperti alirannya saat kamu memuat sebuah halaman:

  1. server menyimak di port 443
  2. browser-mu membuka koneksi
  3. browser mengirim:  GET /about
  4. server menanganinya (berkas statis ATAU jalankan kode + DB)
  5. server mengirim:   200 OK + halamannya
  6. browser menampilkan halaman; server menunggu yang berikutnya

Enam langkah, dari awal sampai akhir, biasanya jauh di bawah satu detik. Kalikan dengan tiap klik, tiap gambar, tiap panggilan API yang aplikasimu lakukan, dan jadilah dengungan aktivitas tanpa henti yang menjaga web tetap hidup. Mesin yang kamu pakai membaca ini barusan melakukan persis tarian ini, beberapa kali, untuk menaruh kata-kata ini di layarmu.

Penutup

Ini semuanya dalam satu tempat:

  • Sebuah server menjalankan loop tanpa akhir: simak, terima, tangani, balas, ulangi.
  • Dia pertama-tama binding ke sebuah port lalu menyimak — sebuah alamat ditambah nomor port adalah “pintu” yang diketuk client.
  • Sebuah client membuka sebuah koneksi (biasanya lewat TCP) lalu mengirim sebuah permintaan yang menyatakan method (GET, POST…), path, dan header.
  • Server menangani permintaan — menyajikan sebuah berkas statis langsung, atau menjalankan kode dan mungkin sebuah query database untuk menyusun jawaban dinamis.
  • Dia mengirim balik sebuah response berisi sebuah status code (200, 404, 500…), header, dan body, lalu kembali menunggu.
  • Server sungguhan melakukan semua ini secara concurrent, menjuggling banyak permintaan sekaligus supaya mesin terasa instan bagi semua orang.

Kalau kamu mau menambatkan ini ke ide yang lebih besar dulu, ada baiknya menengok kembali apa itu server sebenarnya — artikel ini pada dasarnya adalah definisi itu yang diperlihatkan dalam gerak lambat. Dari sini, pertanyaan yang wajar berikutnya adalah soal di mana semua ini terjadi: bedanya menjalankan server di mesinmu sendiri versus di luar sana untuk dunia, dan bagaimana alamat serta port benar-benar bekerja.

Tag:serverdasarrequest-responsebackendpemula
728 × 90Slot Iklan TersediaPasang iklan Anda di sini

Artikel Terkait

Lihat Semua Artikel

Artikel yang Mungkin Kamu Suka

SSL dan enkripsi at rest — data terlindungi saat berjalan dan saat tersimpan di disk
Server / Keamanan Server

SSL dan Enkripsi at Rest: Melindungi Data Saat Berjalan dan Saat Tersimpan

Enkripsi melindungi data di dua tempat: saat data lewat di jaringan (in transit) dan saat data nganggur di disk (at rest). Pahami bedanya, kenapa kamu butuh keduanya, bagaimana TLS, enkripsi disk, dan pengelolaan kunci sebenarnya saling melengkapi, plus kesalahan praktis yang sering bikin sia-sia.

9 Nov 202612 menit baca
Mengamankan port dan service — menutup pintu di server yang tidak kamu pakai
Server / Keamanan Server

Mengamankan Port dan Service: Menutup Pintu yang Tidak Kamu Pakai

Setiap port yang terbuka di server adalah satu pintu yang bisa dicoba orang lain. Pahami port dan service itu sebenarnya apa, kenapa service yang terekspos jadi risiko terbesarmu, dan kebiasaan sederhana menutup semua yang tidak kamu butuhkan — dijelaskan dari nol.

8 Nov 202610 menit baca
Prinsip least privilege — memberi hanya akses minimum yang dibutuhkan tiap user dan proses
Server / Keamanan Server

Prinsip Least Privilege: Beri Setiap Hal Hanya Akses yang Benar-Benar Dibutuhkan

Least privilege adalah aturan diam-diam di balik hampir semua setup keamanan yang solid: setiap user, proses, dan kunci hanya dapat akses minimum untuk menjalankan tugasnya, tidak lebih.

7 Nov 202612 menit baca
Fail2ban dan dasar intrusi — mengawasi log dan mem-banned otomatis pelaku yang menggedor berulang kali
Server / Keamanan Server

Fail2ban dan Dasar Intrusi: Mem-banned Otomatis Bot yang Terus Menggedor Server-mu

Penyerang tidak berhenti setelah sekali salah tebak — mereka terus menggedor, ribuan kali sehari. Pahami seperti apa sebenarnya percobaan intrusi, apa yang dikerjakan fail2ban, bagaimana ia mengawasi log dan mem-banned pelaku otomatis, dan cara menyetelnya dengan masuk akal tanpa mengunci dirimu.

6 Nov 202612 menit baca
Menjaga software tetap update — menutup lubang keamanan yang sudah diketahui sebelum penyerang memakainya
Server / Keamanan Server

Menjaga Software Tetap Update: Kebiasaan Membosankan yang Mencegah Sebagian Besar Pembobolan Server

Kebanyakan server tidak dibobol lewat serangan baru yang canggih — tapi lewat lubang lama yang sudah diketahui, yang sebenarnya cukup ditutup dengan update. Pelajari kenapa update itu penting, apa saja yang harus di-update, cara melakukannya dengan aman tanpa merusak apa pun, dan cara.

5 Nov 20269 menit baca
Konfigurasi firewall — aturan default-deny yang hanya membuka port yang kamu butuhkan
Server / Keamanan Server

Konfigurasi Firewall: Menyusun Aturan Default-Deny Tanpa Mengunci Diri Sendiri

Tahu apa itu firewall dan benar-benar mengonfigurasinya dengan rapi adalah dua keterampilan berbeda. Pelajari cara menyusun aturan default-deny, mengurutkan aturan dengan benar, membuka akses sendiri lebih dulu, menangani IPv6 dan security group cloud, lalu mengujinya sebelum dipakai — panduan.

4 Nov 202614 menit baca