HTTPQUERY
Bahasa Indonesia

GET

Penggunaan

Permintaan GET mengambil data tanpa mengubah status server. Konten apa pun di dalam badan permintaan umumnya tidak memiliki semantik yang terdefinisi, dan seluruh kueri dinyatakan melalui URI target serta header. Respons dapat di-cache secara bawaan, sehingga GET menjadi fondasi caching web.

GET adalah metode bawaan browser untuk navigasi, klik tautan, dan pengiriman formulir tanpa atribut method.

Spesifikasi HTTP tidak melarang badan pesan pada permintaan GET, tetapi semantik badan pesan semacam itu tidak terdefinisi. Browser dan Fetch API membuang badan permintaan GET. Banyak server dan proxy mengabaikan atau menolaknya. Bergantung pada badan pesan di dalam permintaan GET tidak aman untuk interoperabilitas.

Properti

Karena GET bersifat aman dan idempoten, mengirim permintaan yang sama berkali-kali menghasilkan hasil yang sama dan tidak mengubah sumber daya. Browser, crawler, dan proxy semuanya mengandalkan jaminan ini.

GET bersyarat

Permintaan GET menjadi bersyarat ketika satu atau lebih header validator hadir: If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since, atau If-Range. Server mengevaluasi kondisi tersebut dan mengembalikan representasi lengkap hanya ketika kondisi terpenuhi.

GET parsial

Menyertakan header Range mengubah GET menjadi permintaan parsial. Server hanya mengembalikan rentang byte yang diminta dengan status 206. Status 416 menandakan rentang tersebut tidak dapat dipenuhi. Server yang tidak mendukung permintaan rentang mengembalikan 200 beserta badan pesan lengkap.

GET parsial berguna untuk melanjutkan unduhan yang terputus dan melakukan streaming berkas besar secara bersegmen.

GET dasar

Permintaan GET yang paling minimal mengambil sumber daya root. Server mengembalikan 200 beserta representasi lengkap.

Permintaan

GET / HTTP/1.1
Host: example.com

Respons

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

<!doctype html>
<html>...

GET bersyarat

Permintaan ini menyertakan If-Modified-Since, sehingga server hanya mengembalikan badan pesan ketika sumber daya telah berubah sejak tanggal yang ditentukan. Sumber daya yang tidak berubah menghasilkan 304 tanpa badan pesan.

Permintaan

GET / HTTP/1.1
Host: example.com
If-Modified-Since: Sat, 01 Jan 2022 12:00:00 GMT

Respons (tidak dimodifikasi)

HTTP/1.1 304 Not Modified
ETag: "abc123"

GET parsial

Header Range hanya meminta 512 byte pertama. Server merespons dengan 206 dan header Content-Range yang menunjukkan segmen yang dikembalikan.

Permintaan

GET /file.bin HTTP/1.1
Host: example.com
Range: bytes=0-511

Respons

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-511/8192
Content-Length: 512

CORS

GET adalah metode yang masuk daftar aman CORS. Permintaan GET lintas asal tidak memicu permintaan preflight, menjadikan GET sebagai metode bawaan untuk pengambilan sumber daya lintas asal di browser.

GET vs POST

GET mengambil data. POST mengirimkan data untuk diproses. Parameter GET berjalan di dalam string kueri URL, sedangkan parameter POST berada di badan permintaan.

Respons GET dapat di-cache dan dapat ditandai sebagai bookmark. Respons POST hanya dapat di-cache bila disertai informasi kesegaran yang eksplisit. URL memiliki batas panjang praktis, yang membatasi jumlah data yang dapat dibawa GET. POST tidak memiliki batas ukuran badan pesan secara praktis.

GET bersifat aman sekaligus idempoten. POST bukan keduanya. GET yang diulang mengembalikan hasil yang sama. POST yang diulang menciptakan sumber daya duplikat atau memicu pemrosesan dua kali.

Perbedaan performa antara GET dan POST dapat diabaikan. Pilihannya bergantung pada operasinya: pengambilan menggunakan GET, pengiriman menggunakan POST.

Keamanan

Parameter GET terlihat di URL, riwayat browser, log server, dan header Referer. Data sensitif seperti kata sandi, token, dan informasi identitas pribadi tidak boleh sekali pun muncul di string kueri.

Permintaan GET lebih terekspos terhadap serangan CSRF melalui tag dan yang memicu permintaan GET secara otomatis. POST juga rentan terhadap CSRF tanpa token yang memadai.

Baik GET maupun POST tidak menyediakan enkripsi dengan sendirinya. HTTPS diperlukan untuk melindungi data saat transit.

Dampak SEO

Mesin pencari melakukan perayapan dengan GET. Googlebot dan crawler lain mengambil serta mengindeks halaman melalui GET, sehingga sebuah sumber daya hanya dapat ditemukan ketika ia merespons GET biasa. Respons GET yang dapat di-cache dan idempoten dirayapi paling efisien, karena crawler menggunakan kembali validator seperti ETag dan Last-Modified untuk melewati pengambilan ulang halaman yang tidak berubah.