Ilustrasi sampul artikel: Perbedaan GET dan POST: Dua Method HTTP yang Wajib Kamu Tahu
·BackendDasarTutorial

Perbedaan GET dan POST: Dua Method HTTP yang Wajib Kamu Tahu

Perbedaan GET dan POST dijelaskan sederhana: GET untuk mengambil data (tampil di URL), POST untuk mengirim data (di body). Pahami kapan pakai masing-masing HTTP method.

Pembuat Hyper Sheets & BelajarWeb.dev

GET dan POST adalah dua HTTP method yang paling sering kamu pakai saat membangun website, dan memahami bedanya adalah salah satu fondasi penting sebelum menyentuh backend, API, maupun form. Singkatnya: GET dipakai untuk MENGAMBIL data dari server, dengan parameter yang tampil terang-terangan di URL. Sedangkan POST dipakai untuk MENGIRIM atau mengubah data, dengan isi yang dikirim di dalam body dan tidak muncul di URL.

Perbedaan sekecil ini punya efek besar: menentukan apakah sebuah link bisa di-bookmark, apakah datanya masuk ke history browser, apakah aman untuk password, sampai apakah hasilnya di-cache. Di panduan ini kamu akan belajar apa itu HTTP method, cara kerja GET dan POST satu per satu, perbedaan lengkapnya dalam satu tabel, mitos soal keamanan, dan kapan harus memilih yang mana, lengkap dengan contoh di HTML dan fetch.

Sekilas: Apa Itu HTTP Method?

Setiap kali browser meminta sesuatu ke server, ia mengirim sebuah request. Dan setiap request punya “kata kerja” yang menjelaskan apa yang ingin dilakukan terhadap sebuah alamat (URL). Kata kerja inilah yang disebut HTTP method.

Bayangkan kamu bicara ke pelayan restoran. Kamu tidak cuma menyebut nama menu, kamu juga menyebut aksinya: “tolong ambilkan menu itu” atau “tolong catat pesanan ini”. HTTP method adalah aksi itu. Yang paling umum ada dua: GET (“ambilkan sesuatu untukku”) dan POST (“ini data, tolong proses/simpan”).

Ada method lain juga, PUT, PATCH, DELETE, tapi untuk pemula, menguasai GET dan POST sudah menutup 90% kebutuhan sehari-hari. Kalau kamu masih baru banget di dunia web dan belum pernah membuat halaman sama sekali, ada baiknya baca dulu cara membuat website pertama supaya konteksnya terasa nyata.

GET: Mengambil Data

GET adalah method untuk meminta data tanpa mengubah apa pun di server. Setiap kali kamu mengetik alamat di browser, mengklik sebuah hyperlink, atau membuka hasil pencarian, browser sedang mengirim request GET. Tujuannya cuma satu: “ambilkan halaman/data ini untukku”.

Ciri khas GET:

  • Parameter tampil di URL sebagai query string. Bagian setelah tanda ? di sebuah alamat adalah data yang kamu kirim. Contoh: toko.com/cari?q=sepatu&hal=2 mengirim q=sepatu dan hal=2. Semua orang bisa melihatnya di address bar.
  • Bisa di-bookmark dan dibagikan. Karena seluruh datanya ada di URL, kamu tinggal menyalin link-nya. Buka lagi nanti, hasilnya sama.
  • Di-cache secara default. Browser dan server boleh menyimpan hasil GET supaya request yang sama berikutnya lebih cepat.
  • Bersifat “safe” dan idempotent. Safe artinya GET seharusnya tidak mengubah data di server, cuma membaca. Idempotent artinya menjalankannya sekali atau seratus kali hasilnya sama; kamu tidak akan tak sengaja membuat 100 pesanan hanya karena me-refresh halaman.
  • Panjang URL terbatas. URL punya batas panjang (secara praktik sekitar 2000 karakter, tergantung browser dan server), jadi GET tidak cocok untuk mengirim data besar.

POST: Mengirim atau Mengubah Data

POST adalah method untuk mengirim data ke server agar diproses, biasanya untuk membuat atau mengubah sesuatu. Saat kamu login, mendaftar akun, mengirim komentar, atau checkout belanja, browser mengirim request POST.

Ciri khas POST:

  • Data dikirim di dalam body, bukan di URL. Isi request “dibungkus” terpisah dari alamat, sehingga tidak muncul di address bar. URL-nya cukup POST /login saja; email dan password ada di body.
  • Tidak di-cache dan tidak di-bookmark secara default. Karena POST mengubah sesuatu, browser tidak menyimpannya. Coba refresh halaman setelah submit form, browser biasanya bertanya “Kirim ulang data?”.
  • Tidak idempotent. Mengirim POST dua kali bisa membuat dua data. Submit form pembayaran dua kali bisa jadi dua transaksi, itulah kenapa tombol submit sering di-disable setelah diklik.
  • Tidak ada batas ukuran praktis. Karena datanya di body, kamu bisa mengirim data besar: teks panjang, JSON, bahkan file upload.

Sekarang setelah kamu kenal keduanya, perhatikan perbandingannya secara visual. Ini inti yang perlu tertanam:

GETambil data
toko.com/cari?q=sepatu&hal=2

Data terlihat di URL

  • Aman di-bookmark
  • Bisa di-cache
  • Untuk MENGAMBIL data
  • Panjang URL terbatas
  • JANGAN untuk data sensitif
POSTkirim data
POST /login
Body (tersembunyi){ email, password }

Data di body, tidak di URL

  • Tidak tampil di URL
  • Tidak di-cache/bookmark
  • Untuk MENGIRIM/mengubah data
  • Tak ada batas praktis
  • Cocok data sensitif
GET = ambil data (terlihat di URL).POST = kirim data (di body).

Perhatikan kontras utamanya: di GET, datamu terlihat di URL; di POST, datamu tersembunyi di body. Dari satu perbedaan ini turun hampir semua konsekuensi lainnya.

Perbedaan GET vs POST (Tabel Lengkap)

Inilah bagian paling penting. Berikut perbandingan GET dan POST berdampingan untuk semua aspek yang biasa jadi pertimbangan:

Aspek GET POST
Lokasi data Di URL (query string setelah ?) Di dalam body request
Visibilitas Terlihat jelas di address bar Tidak tampil di URL
Tujuan Mengambil data (membaca) Mengirim/mengubah data (menulis)
Caching Boleh di-cache Tidak di-cache secara default
Bookmark Bisa, cukup salin URL Tidak bisa di-bookmark begitu saja
Batas ukuran Terbatas panjang URL (~2000 karakter) Praktis tak terbatas (teks besar, file)
Idempotent Ya, ulang berapa kali pun sama Tidak, ulang bisa membuat data ganda
Keamanan data Jangan untuk data sensitif (masuk log/history) Lebih cocok untuk data sensitif
Kapan dipakai Pencarian, filter, buka halaman, ambil daftar Login, daftar, checkout, kirim komentar

Kalau kamu perhatikan pola “membaca vs menulis” ini akan terus muncul. GET = baca (aman diulang, boleh disimpan). POST = tulis (hati-hati diulang, jangan disimpan).

Keamanan: Mitos vs Fakta

Ini bagian yang sering disalahpahami pemula, jadi baca pelan-pelan.

Mitos:POST itu aman, GET tidak aman.” Fakta: POST bukan berarti terenkripsi atau kebal disadap. Data POST memang tidak muncul di URL, tapi kalau koneksinya masih http:// biasa (bukan https://), isinya tetap bisa dibaca siapa pun yang menyadap jaringan. Yang benar-benar mengamankan data saat dikirim adalah HTTPS, bukan pilihan method-nya.

Jadi apa gunanya membedakan GET dan POST dari sisi keamanan? Perbedaannya ada di jejak yang tertinggal. Karena parameter GET ada di URL, ia akan:

  • Tercatat di history browser, orang lain yang memakai komputer yang sama bisa melihatnya.
  • Masuk ke log server dan log proxy, password kamu bisa tersimpan sebagai teks biasa di file log entah di mana.
  • Ikut terbawa saat kamu share link ke orang lain.

Itulah kenapa password, token, dan data pribadi tidak boleh dikirim lewat GET. Bukan karena POST ajaib, tapi karena GET meninggalkan jejak di banyak tempat.

Kapan Pakai GET, Kapan Pakai POST?

Aturan praktisnya sederhana. Tanyakan: “Apakah request ini mengubah sesuatu di server?”

  • Tidak mengubah apa-apa, cuma membaca → pakai GET. Contoh: menampilkan halaman produk, mencari barang, memfilter daftar, membuka profil.
  • Mengubah atau membuat sesuatu → pakai POST. Contoh: login, daftar akun, kirim form kontak, checkout, upload foto.

Pertanyaan kedua yang membantu: “Apakah enak kalau link-nya bisa dibagikan/di-bookmark?” Kalau ya, GET cocok. Halaman hasil pencarian seperti toko.com/cari?q=sepatu enak dibagikan ke teman, tinggal kirim link. Sebaliknya, halaman “pembayaran berhasil” jangan sampai bisa di-refresh jadi bayar dua kali; itu ranah POST.

Contoh di HTML: <form method="...">

Di HTML, kamu menentukan method lewat atribut method pada tag <form>. Form pencarian yang enak dibagikan pakai get:

<!-- Data akan muncul di URL: /cari?q=sepatu -->
<form action="/cari" method="get">
  <input type="text" name="q" placeholder="Cari produk...">
  <button type="submit">Cari</button>
</form>

Sedangkan form login, yang mengirim data sensitif, pakai post:

<!-- email & password dikirim di body, tidak muncul di URL -->
<form action="/login" method="post">
  <input type="email" name="email">
  <input type="password" name="password">
  <button type="submit">Masuk</button>
</form>

Kalau kamu tidak menulis atribut method sama sekali, browser memakai get sebagai default, jadi hati-hati jangan sampai form login-mu diam-diam mengirim password ke URL. Mau berlatih membuat dan memvalidasi form seperti ini secara langsung di browser? Coba latihan form & validasi di Hyper Sheets yang bisa langsung kamu kerjakan tanpa setup.

Contoh di JavaScript: fetch

Saat mengambil data dari API dengan JavaScript, fetch memakai GET secara default, cukup berikan URL-nya:

// GET, cukup URL, parameter di query string
const res = await fetch('https://api.toko.com/produk?kategori=sepatu')
const data = await res.json()
console.log(data)

Untuk POST, kamu perlu menyebut method-nya dan menyertakan body berisi data yang dikirim (biasanya dalam format JSON):

// POST, kirim data di body
const res = await fetch('https://api.toko.com/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: '[email protected]',
    password: 'rahasia123'
  })
})
const hasil = await res.json()

Perhatikan bahwa GET tidak boleh punya body, datanya harus di URL. Sedangkan POST menaruh datanya di body, dan Content-Type memberi tahu server format datanya. Ini pola yang akan kamu pakai berulang kali saat bekerja dengan API.

Method HTTP Lainnya, Sekilas

Selain GET dan POST, ada beberapa method lain yang akan kamu temui saat mendalami API:

  • PUT, mengganti seluruh data sebuah resource (idempotent: mengulang menghasilkan keadaan yang sama).
  • PATCH, mengubah sebagian data saja, bukan seluruhnya.
  • DELETE, menghapus sebuah resource.

Konsep “idempotent” yang sudah kita singgung di atas jadi makin penting begitu kamu memakai method-method ini, tapi untuk sekarang, kuasai dulu GET dan POST sampai benar-benar nyaman, karena keduanya adalah pintu masuk ke semua yang lain.

Cek Pemahaman

Sebuah form login mengirim email dan password ke server. Method HTTP mana yang paling tepat dipakai?

FAQ Seputar GET dan POST

Apa perbedaan GET dan POST?

Perbedaan utamanya: GET dipakai untuk mengambil data dan mengirim parameternya lewat URL (terlihat, bisa di-bookmark, di-cache), sedangkan POST dipakai untuk mengirim atau mengubah data dan mengirim isinya lewat body request (tidak tampil di URL, tidak di-cache). GET bersifat “safe” dan idempotent; POST tidak.

Kapan pakai GET dan kapan pakai POST?

Pakai GET kalau request cuma membaca data dan enak kalau link-nya bisa dibagikan, seperti pencarian, filter, atau membuka halaman. Pakai POST kalau request mengubah sesuatu di server, seperti login, daftar, checkout, atau kirim komentar. Pertanyaan kuncinya: “Apakah ini mengubah data?” Kalau ya, POST.

Apakah POST lebih aman daripada GET?

Tidak secara otomatis. POST memang tidak menaruh data di URL sehingga tidak tercatat di history dan log, itu lebih baik untuk data sensitif. Tapi POST tidak mengenkripsi data. Yang benar-benar mengamankan pengiriman adalah HTTPS. Jadi jangan andalkan POST saja; selalu pakai https:// untuk data sensitif.

GET dan POST itu apa?

GET dan POST adalah dua HTTP method, “kata kerja” yang menjelaskan apa yang ingin dilakukan sebuah request ke server. GET berarti “ambilkan data ini”, POST berarti “ini data, tolong proses/simpan”. Keduanya adalah dasar cara browser dan server saling berkomunikasi di web.

Method HTTP itu apa?

HTTP method adalah instruksi yang dikirim browser bersama setiap request untuk memberi tahu server aksi yang diinginkan. Yang paling umum adalah GET (ambil) dan POST (kirim/ubah), disusul PUT, PATCH, dan DELETE untuk memperbarui atau menghapus data. Method inilah yang membuat sebuah alamat URL bisa “diperlakukan” secara berbeda tergantung tujuannya.

Kenapa data GET muncul di URL?

Karena GET memang dirancang untuk membawa parameternya sebagai query string, bagian setelah tanda ? di URL. Desain ini disengaja supaya sebuah request bisa disimpan, di-bookmark, dan dibagikan hanya dengan menyalin alamatnya. Konsekuensinya, jangan pernah menaruh data rahasia di GET, karena semuanya tercatat di URL, history, dan log.

Penutup

GET dan POST mungkin terdengar teknis, tapi intinya sederhana dan akan menempel begitu kamu sering memakainya: GET untuk mengambil (data di URL, terlihat), POST untuk mengirim (data di body, tersembunyi). Dari satu perbedaan itu turun semua hal lain, caching, bookmark, keamanan jejak, dan idempotency.

Langkah berikutnya yang bagus adalah mempraktikkannya langsung: buat form sederhana, coba method="get" lalu method="post", dan perhatikan bedanya di address bar browser. Setelah itu, saat kamu mulai belajar API dan fetch, konsep ini akan terasa seperti bahasa yang sudah kamu kuasai.