Dapatkan Vs. POS

Dapatkan Vs. POS

Http POS Meminta menyediakan data tambahan dari klien (browser) ke server di badan pesan. Sebaliknya, MENDAPATKAN Permintaan mencakup semua data yang diperlukan dalam URL. Formulir dalam HTML dapat menggunakan salah satu metode dengan menentukan Metode = "Posting" atau metode = "dapatkan" (default) di elemen. Metode yang ditentukan menentukan bagaimana data bentuk dikirimkan ke server. Saat metode ini didapat, semua data form yang dikodekan ke dalam URL, ditambahkan ke tindakan URL sebagai parameter string kueri. Dengan POST, data formulir muncul di dalam badan pesan dari permintaan HTTP.

Grafik perbandingan

Bagan Get Versus Post Perbandingan
MENDAPATKANPOS
  • Peringkat saat ini adalah 4.12/5
  • 1
  • 2
  • 3
  • 4
  • 5
(Peringkat 1244)
  • Peringkat saat ini adalah 4.42/5
  • 1
  • 2
  • 3
  • 4
  • 5
(1364 peringkat)
Sejarah Parameter tetap dalam sejarah browser karena mereka adalah bagian dari URL Parameter tidak disimpan dalam sejarah browser.
Bookmark Bisa ditandai. Tidak bisa ditandai.
Back Button/Perilaku RE-Submit Dapatkan permintaan dieksekusi ulang tetapi mungkin tidak diterapkan kembali ke server jika HTML disimpan dalam cache browser. Browser biasanya mengingatkan pengguna bahwa data perlu diajukan kembali.
Jenis Pengkodean (Atribut Enctype) Aplikasi/X-WWW-Form-Urlencoded multipart/form-data atau aplikasi/x-www-form-urlencoded menggunakan encoding multipart untuk data biner.
Parameter dapat mengirim tetapi data parameter terbatas pada apa yang dapat kami masukkan ke dalam jalur permintaan (URL). Paling aman untuk digunakan kurang dari 2k parameter, beberapa server menangani hingga 64k Dapat mengirim parameter, termasuk mengunggah file, ke server.
Diretas Lebih mudah untuk meretas anak -anak skrip Lebih sulit untuk diretas
Pembatasan pada tipe data formulir Ya, hanya karakter ASCII yang diizinkan. Tidak ada batasan. Data biner juga diizinkan.
Keamanan Dapatkan kurang aman dibandingkan dengan posting karena data yang dikirim adalah bagian dari URL. Jadi disimpan dalam riwayat browser dan log server di plaintext. Posting sedikit lebih aman daripada didapat karena parameter tidak disimpan dalam riwayat browser atau di log server web.
Pembatasan panjang data formulir Ya, karena data formulir ada di URL dan panjang URL dibatasi. Batas panjang URL yang aman sering kali 2048 karakter tetapi bervariasi berdasarkan browser dan server web. Tidak ada batasan
Kegunaan Dapatkan metode tidak boleh digunakan saat mengirim kata sandi atau informasi sensitif lainnya. Metode posting digunakan saat mengirim kata sandi atau informasi sensitif lainnya.
Visibilitas Get Method terlihat oleh semua orang (akan ditampilkan di bilah alamat browser) dan memiliki batasan jumlah informasi yang akan dikirim. Variabel metode pos tidak ditampilkan dalam URL.
Di -cache Bisa di -cache Tidak di -cache

Perbedaan dalam pengiriman formulir

Perbedaan mendasar antara Metode = "dapatkan" Dan Metode = "Posting" apakah itu sesuai dengan Permintaan HTTP yang berbeda, sebagaimana didefinisikan dalam spesifikasi HTTP. Proses pengiriman untuk kedua metode dimulai dengan cara yang sama - set data formulir dibangun oleh browser dan kemudian dikodekan dengan cara yang ditentukan oleh enctype atribut. Untuk Metode = "Posting itu enctype atribut bisa multipart/form-data atau Aplikasi/X-WWW-Form-Urlencoded, sedangkan untuk Metode = "dapatkan", hanya Aplikasi/X-WWW-Form-Urlencoded Diperbolehkan. Kumpulan data formulir ini kemudian dikirim ke server.

Untuk pengiriman formulir dengan metode = "dapatkan", browser membangun URL dengan mengambil nilai tindakan atribut, menambahkan a ? Untuk itu, kemudian menambahkan set data formulir (dikodekan menggunakan jenis konten Application/X-WWW-Form-Form). 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 host, kemudian mengirimkan ke tuan rumah yang mendapatkan permintaan dengan sisa URL sebagai argumen. Server mengambilnya dari sana. Perhatikan bahwa proses ini berarti bahwa data formulir terbatas pada kode ASCII. Perawatan khusus harus diambil untuk mengkodekan dan memecahkan kode karakter jenis lain saat melewatinya melalui URL dalam format ASCII.

Pengajuan formulir dengan metode = "POST" menyebabkan permintaan pos untuk dikirim, menggunakan nilai tindakan atribut dan pesan yang dibuat sesuai dengan jenis konten yang ditentukan oleh enctype atribut.

Pro dan kontra

Karena data formus dikirim sebagai bagian dari URL saat MENDAPATKAN digunakan --

  • Data formulir terbatas pada kode ASCII. Perawatan khusus harus diambil untuk mengkodekan dan memecahkan kode karakter jenis lain saat melewatinya melalui URL dalam format ASCII. Di sisi lain, data biner, gambar, dan file lainnya semuanya dapat dikirimkan melalui Metode = "Posting"
  • Semua data formulir diisi terlihat di URL. Selain itu, ini juga disimpan dalam riwayat/log penjelajahan web pengguna untuk browser. Masalah ini membuat MENDAPATKAN kurang aman.
  • Namun, satu keuntungan dari data form yang dikirim sebagai bagian dari URL adalah bahwa seseorang dapat menandai URL dan secara langsung menggunakannya dan sepenuhnya melewati proses pengisian formulir.
  • Ada batasan berapa banyak data bentuk yang dapat dikirim karena panjang url terbatas.
  • Skrip Kiddies dapat lebih mudah mengekspos kerentanan dalam sistem untuk meretasnya. Misalnya, Citibank diretas dengan mengubah nomor akun dalam string URL.[1] Tentu saja, peretas yang berpengalaman atau pengembang web dapat mengekspos kerentanan tersebut bahkan jika posting digunakan; itu hanya sedikit lebih sulit. Secara umum, server harus curiga terhadap data apa pun yang dikirim oleh klien dan menjaga referensi objek langsung yang tidak aman.

Perbedaan dalam pemrosesan sisi server

Pada prinsipnya, pemrosesan data formulir yang dikirimkan tergantung pada apakah itu dikirim Metode = "dapatkan" atau Metode = "Posting". Karena data dikodekan dengan cara yang berbeda, mekanisme decoding yang berbeda diperlukan. Dengan demikian, secara umum, mengubah metode ini mungkin memerlukan perubahan dalam skrip yang memproses pengiriman. Misalnya, saat menggunakan antarmuka CGI, skrip menerima data dalam variabel lingkungan (querystring) saat MENDAPATKAN digunakan. Tapi ketika POS digunakan, data formulir dilewatkan dalam aliran input standar (Stdin) dan jumlah byte yang akan dibaca diberikan oleh header panjang konten.

Apa yang terjadi saat mendapatkan dan memposting konflik variabel?

Dalam beberapa bahasa seperti PHP, informasi dari parameter GET dan POST, selain tersedia secara terpisah, juga digabungkan menjadi variabel kenyamanan e.G., $ _REQUEST dalam php. Jika ada konflik-i.e., Nama parameter yang sama digunakan dengan nilai yang berbeda dalam get dan pasca-kemudian konflik diselesaikan dengan aturan tertentu. Dalam kasus PHP, prioritas diputuskan oleh variabel_order Petunjuk Konfigurasi. Pesanan default adalah EGPC (lingkungan, get, post, cookie, server). Ini berarti variabel dalam $ _get mendapat prioritas lebih dari $ _post, yang pada gilirannya mendapat prioritas lebih dari $ _cookie.

Penggunaan yang disarankan

Get direkomendasikan saat mengirimkan formulir "idempoten" - yang tidak 'secara signifikan mengubah keadaan dunia'. Dengan kata lain, bentuk yang hanya melibatkan kueri database. Perspektif lain adalah bahwa beberapa kueri idempoten akan memiliki efek yang sama dengan satu kueri. Jika pembaruan database atau tindakan lain seperti memicu email yang terlibat, penggunaan POST direkomendasikan.

Dari blog pengembang Dropbox:

Browser tidak tahu persis apa yang dilakukan formulir HTML tertentu, tetapi jika formulir diajukan melalui HTTP GET, browser tahu aman untuk secara otomatis mencoba lagi pengiriman jika ada kesalahan jaringan. Untuk formulir yang menggunakan HTTP Post, mungkin tidak aman untuk mencoba lagi sehingga browser meminta pengguna untuk konfirmasi terlebih dahulu.

Permintaan "dapatkan" sering dapat di -cache, sedangkan permintaan "posting" hampir tidak bisa. 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 pertanyaan idempoten:

  • Jika data formulir akan berisi karakter non-ASCII (seperti karakter beraksen), lalu Metode = "dapatkan" pada prinsipnya tidak dapat diterapkan, meskipun dapat bekerja dalam praktik (terutama untuk karakter ISO Latin 1).
  • Jika set 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 cara kerja formulir, terutama untuk membuat bidang "tersembunyi" (input type = "tersembunyi") lebih tersembunyi dengan tidak muncul di URL. Tetapi bahkan jika Anda menggunakan bidang tersembunyi dengan Metode = "Posting", Mereka masih akan muncul dalam kode sumber HTML.

Bagaimana dengan https?

Diperbarui 15 Mei 2015: Khususnya saat menggunakan HTTPS (HTTP Over TLS/SSL), apakah POST menawarkan keamanan lebih dari Get?

Ini adalah pertanyaan yang menarik. Katakanlah Anda membuat permintaan mendapatkan halaman web:

 Dapatkan https: // www.contoh.com/login.php?Pengguna = Mickey & PassWD = Mini 

Dengan asumsi bahwa koneksi internet Anda sedang dipantau, informasi apa tentang permintaan ini akan tersedia untuk pengintai? Jika posting digunakan sebagai gantinya, dan data pengguna dan passwd termasuk dalam variabel pos, akan lebih aman dalam hal koneksi HTTPS?

Jawabannya adalah tidak. Jika Anda membuat permintaan GET seperti itu, hanya informasi berikut yang akan diketahui penyerang yang memantau lalu lintas web Anda:

  1. Fakta bahwa Anda membuat koneksi https
  2. Nama host - www.contoh.com
  3. Total panjang permintaan
  4. Panjang responsnya

Bagian jalan dari URL - i.e., Halaman yang sebenarnya diminta, serta parameter string kueri - dilindungi (dienkripsi) saat mereka "di atas kawat".e., dalam perjalanan dalam perjalanan ke server tujuan. Situasinya persis sama untuk permintaan pos.

Itu POS Metode masih mempertahankan satu keunggulan bahkan dalam kasus HTTPS, namun. Server web cenderung mencatat seluruh URL yang diminta dalam teks biasa dalam log aksesnya; Jadi mengirimkan informasi sensitif ke GET bukanlah ide yang bagus. Ini berlaku terlepas dari apakah HTTP atau HTTPS digunakan.