HTTP POS permintaan menyediakan data tambahan dari klien (browser) ke server di badan pesan. Sebaliknya, DAPATKAN permintaan mencakup semua data yang diperlukan dalam URL. Formulir dalam HTML dapat menggunakan metode mana pun dengan menetapkan method = "POST" atau method = "DAPATKAN" (default) di menu elemen. Metode yang ditentukan menentukan bagaimana data formulir dikirimkan ke server. Ketika metode ini MENDAPATKAN, semua data formulir dikodekan ke dalam URL, ditambahkan ke tindakan URL sebagai parameter string kueri. Dengan POST, data formulir muncul di dalam tubuh pesan dari permintaan HTTP.
DAPATKAN | POS | |
---|---|---|
Sejarah | Parameter tetap dalam riwayat peramban karena merupakan bagian dari URL | Parameter tidak disimpan dalam riwayat browser. |
Ditandai | Dapat di-bookmark. | Tidak bisa di-bookmark. |
Tombol KEMBALI / kirim kembali perilaku | Permintaan GET dieksekusi kembali tetapi mungkin tidak dikirimkan kembali ke server jika HTML disimpan dalam cache browser. | Browser biasanya memperingatkan pengguna bahwa data perlu dikirim ulang. |
Jenis pengodean (atribut enctype) | application / x-www-form-urlencoded | multipart / form-data atau aplikasi / x-www-form-urlencoded Gunakan pengkodean multipart untuk data biner. |
Parameter | dapat mengirim tetapi data parameter terbatas pada apa yang dapat kami masukkan ke dalam baris permintaan (URL). Paling aman untuk menggunakan kurang dari 2K parameter, beberapa server menangani hingga 64K | Dapat mengirim parameter, termasuk mengunggah file, ke server. |
Diretas | Lebih mudah untuk meretas untuk kiddies skrip | Lebih sulit untuk diretas |
Pembatasan pada tipe data formulir | Ya, hanya karakter ASCII yang diizinkan. | Tidak ada batasan. Data biner juga diizinkan. |
Keamanan | GET kurang aman dibandingkan dengan POST karena data yang dikirim adalah bagian dari URL. Jadi itu disimpan dalam riwayat browser dan log server di plaintext. | POST sedikit lebih aman daripada GET karena parameter tidak disimpan dalam riwayat browser atau dalam log server web. |
Pembatasan pada panjang data formulir | Ya, karena data formulir ada di URL dan panjang URL dibatasi. Batas panjang URL aman seringkali 2048 karakter tetapi bervariasi berdasarkan browser dan server web. | Tidak ada batasan |
Kegunaan | Metode GET tidak boleh digunakan saat mengirim kata sandi atau informasi sensitif lainnya. | Metode POST digunakan ketika mengirim kata sandi atau informasi sensitif lainnya. |
Visibilitas | Metode GET dapat dilihat oleh semua orang (akan ditampilkan di bilah alamat browser) dan memiliki batasan jumlah informasi untuk dikirim. | Variabel metode POST tidak ditampilkan dalam URL. |
Dalam cache | Dapat di-cache | Tidak di-cache |
Perbedaan mendasar antara METODE = "DAPATKAN" dan METODE = "POST" adalah bahwa mereka sesuai permintaan HTTP berbeda, sebagaimana didefinisikan dalam spesifikasi HTTP. Proses pengiriman untuk kedua metode dimulai dengan cara yang sama - kumpulan data formulir dibuat oleh browser dan kemudian dikodekan dengan cara yang ditentukan oleh enctype atribut. Untuk METODE = "POST itu enctype atribut bisa multipart / formulir-data atau application / x-www-form-urlencoded, sedangkan untuk METODE = "DAPATKAN", hanya application / x-www-form-urlencoded Diperbolehkan. Kumpulan data formulir ini kemudian ditransmisikan ke server.
Untuk pengiriman formulir dengan METHOD = "GET", browser membuat URL dengan mengambil nilai dari tindakan atribut, menambahkan a ? untuk itu, kemudian menambahkan kumpulan data formulir (disandikan menggunakan tipe konten aplikasi / x-www-form-urlencoded). Browser kemudian memproses URL ini seolah-olah mengikuti tautan (atau seolah-olah pengguna telah mengetik URL secara langsung). Browser membagi URL menjadi beberapa bagian dan mengenali suatu host, kemudian mengirimkan permintaan GET ke host tersebut dengan URL lainnya sebagai argumen. Server mengambilnya dari sana. Perhatikan bahwa proses ini berarti bahwa formulir data terbatas pada kode ASCII. Perhatian khusus harus diberikan untuk menyandikan dan mendekode jenis karakter lain ketika melewati mereka melalui URL dalam format ASCII.
Pengajuan formulir dengan METHOD = "POST" menyebabkan permintaan POST dikirim, menggunakan nilai dari tindakan atribut dan pesan yang dibuat sesuai dengan jenis konten yang ditentukan oleh enctype atribut.
Sejak data formulir dikirim sebagai bagian dari URL ketika DAPATKAN digunakan --
Pada prinsipnya, pemrosesan data formulir yang dikirimkan tergantung pada apakah dikirim bersama METODE = "DAPATKAN" atau METODE = "POST". Karena data dikodekan dengan cara yang berbeda, mekanisme decoding yang berbeda diperlukan. Dengan demikian, secara umum, mengubah METODE mungkin memerlukan perubahan pada skrip yang memproses pengiriman. Misalnya, saat menggunakan antarmuka CGI, skrip menerima data dalam variabel lingkungan (QUERYSTRING) kapan DAPATKAN digunakan. Tapi ketika POS digunakan, formulir data dilewatkan dalam aliran input standar (stdin) dan jumlah byte yang akan dibaca diberikan oleh header Panjang Konten.
GET direkomendasikan ketika mengirimkan formulir "idempoten" - formulir yang tidak 'secara signifikan mengubah keadaan dunia'. Dengan kata lain, formulir yang hanya melibatkan permintaan basis data. Perspektif lain adalah bahwa beberapa kueri idempoten akan memiliki efek yang sama dengan satu kueri. Jika pembaruan basis data atau tindakan lain seperti memicu email terlibat, penggunaan POST dianjurkan.
Dari blog pengembang Dropbox:
browser tidak tahu persis apa yang dilakukan formulir HTML tertentu, tetapi jika formulir dikirimkan melalui HTTP GET, browser tahu bahwa aman untuk secara otomatis mencoba kembali pengiriman jika ada kesalahan jaringan. Untuk formulir yang menggunakan HTTP POST, mungkin tidak aman untuk mencoba lagi sehingga browser meminta konfirmasi terlebih dahulu kepada pengguna.
Permintaan "GET" seringkali dapat di-cache, sedangkan permintaan "POST" sulit. Untuk sistem kueri, ini mungkin memiliki dampak efisiensi yang cukup besar, terutama jika string kueri sederhana, karena cache mungkin melayani kueri yang paling sering.
Dalam kasus tertentu, menggunakan POS direkomendasikan bahkan untuk permintaan idempoten:
Diperbarui 15 Mei 2015: Khususnya ketika menggunakan HTTPS (HTTP over TLS / SSL), apakah POST menawarkan keamanan lebih daripada GET?
Ini pertanyaan yang menarik. Katakanlah Anda membuat permintaan GET ke halaman web:
DAPATKAN https://www.example.com/login.php?user=mickey&passwd=mini
Dengan asumsi bahwa koneksi Internet Anda sedang dipantau, informasi apa tentang permintaan ini akan tersedia untuk pengintai? Jika POST digunakan sebagai gantinya, dan data pengguna dan sandi dimasukkan dalam variabel POST, apakah itu akan lebih aman dalam kasus koneksi HTTPS?
Jawabannya adalah tidak. Jika Anda membuat permintaan GET tersebut, hanya informasi berikut yang akan diketahui oleh penyerang yang memantau lalu lintas web Anda:
Bagian jalur URL - yaitu, halaman sebenarnya yang diminta, serta parameter string kueri - dilindungi (dienkripsi) ketika sedang "over the wire" yaitu, dalam perjalanan dalam perjalanan ke server tujuan. Situasinya persis sama untuk permintaan POST.
Tentu saja, server web cenderung mencatat seluruh URL dalam teks biasa di log akses mereka; jadi mengirim informasi sensitif melalui GET bukanlah ide yang baik. Ini berlaku terlepas dari apakah HTTP atau HTTPS digunakan.