DAPATKAN vs. POST

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.

Grafik perbandingan

DAPATKAN versus grafik perbandingan POST
DAPATKANPOS
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

Isi: DAPATKAN vs POST

  • 1 Perbedaan dalam Pengajuan Formulir
    • 1.1 Pro dan Kontra
  • 2 Perbedaan dalam Pemrosesan Sisi-Server
  • 3 Penggunaan yang Disarankan
  • 4 Bagaimana dengan HTTPS?
  • 5 Referensi

Perbedaan dalam Pengajuan Formulir

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.

Pro dan kontra

Sejak data formulir dikirim sebagai bagian dari URL ketika DAPATKAN digunakan --

  • Formulir data dibatasi untuk kode ASCII. Perhatian khusus harus diberikan untuk menyandikan dan mendekode jenis karakter lain ketika melewati mereka melalui URL dalam format ASCII. Di sisi lain, data biner, gambar, dan file lainnya semuanya dapat dikirimkan melalui METODE = "POST"
  • Semua data formulir yang diisi terlihat di URL. Selain itu, ini juga disimpan dalam riwayat penelusuran web / log pengguna untuk browser. Masalah-masalah ini membuat DAPATKAN kurang aman.
  • Namun, satu keuntungan dari data formulir yang dikirim sebagai bagian dari URL adalah seseorang dapat mem-bookmark URL dan langsung menggunakannya dan sepenuhnya memotong proses pengisian formulir.
  • Ada batasan pada seberapa banyak data formulir dapat dikirim karena panjang URL terbatas.
  • Script kiddies dapat dengan lebih mudah mengekspos kerentanan dalam sistem untuk meretasnya. Misalnya, Citibank diretas dengan mengubah nomor akun di string URL.[1] Tentu saja, peretas atau pengembang web yang berpengalaman dapat mengekspos kerentanan tersebut bahkan jika POST digunakan; hanya sedikit lebih sulit. Secara umum, server harus curiga terhadap data yang dikirim oleh klien dan menjaga terhadap Referensi Objek Langsung Tidak Aman.

Perbedaan dalam pemrosesan sisi server

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.

Penggunaan yang Disarankan

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:

  • Jika data formulir akan berisi karakter non-ASCII (seperti karakter beraksen), lalu METODE = "DAPATKAN" pada prinsipnya tidak dapat diterapkan, meskipun dapat bekerja dalam praktiknya (terutama untuk karakter ISO Latin 1).
  • Jika kumpulan data formulir besar - katakanlah, ratusan karakter - lalu METODE = "DAPATKAN" dapat menyebabkan masalah praktis dengan implementasi yang tidak dapat menangani URL yang panjang itu.
  • Anda mungkin ingin menghindari METODE = "DAPATKAN" untuk membuatnya kurang terlihat oleh pengguna bagaimana formulir bekerja, terutama untuk membuat bidang "tersembunyi" (INPUT TYPE = "HIDDEN") lebih tersembunyi dengan tidak muncul di URL. Tetapi bahkan jika Anda menggunakan bidang tersembunyi dengan METODE = "POST", mereka masih akan muncul dalam kode sumber HTML.

Bagaimana dengan HTTPS?

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:

  1. Fakta bahwa Anda membuat koneksi HTTPS
  2. Nama host - www.example.com
  3. Total panjang permintaan
  4. Panjangnya respons

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.

Referensi

  • wikipedia: POST (HTTP)
  • Metode Permintaan HTTP
  • Posting HTTP - W3.org
  • Dapatkan HTTP - W3.org
  • Apakah HTTPS menyembunyikan URL yang sedang diakses? - Penumpukan Tumpukan