Dapatkan vs. Jawatan

Dapatkan vs. Jawatan

Http Jawatan Permintaan membekalkan data tambahan dari klien (penyemak imbas) ke pelayan dalam badan mesej. Berbeza, Dapatkan Permintaan termasuk semua data yang diperlukan dalam URL. Borang dalam HTML boleh menggunakan kaedah sama ada dengan menentukan kaedah = "Pos" atau kaedah = "Dapatkan" (lalai) di elemen. Kaedah yang dinyatakan menentukan bagaimana data borang dikemukakan ke pelayan. Apabila kaedah mendapat, semua data borang dikodkan ke dalam URL, dilampirkan ke tindakan URL sebagai parameter rentetan pertanyaan. Dengan jawatan, data borang muncul dalam badan mesej permintaan HTTP.

Carta Perbandingan

Dapatkan carta perbandingan pos versus
DapatkanJawatan
  • Penarafan semasa ialah 4.12/5
  • 1
  • 2
  • 3
  • 4
  • 5
(1244 penilaian)
  • Penarafan semasa ialah 4.42/5
  • 1
  • 2
  • 3
  • 4
  • 5
(1364 penilaian)
Sejarah Parameter kekal dalam sejarah penyemak imbas kerana mereka adalah sebahagian daripada URL Parameter tidak disimpan dalam sejarah penyemak imbas.
Bookmarked Boleh ditandakan. Tidak boleh ditanda buku.
Butang belakang/tingkah laku semula Dapatkan permintaan dilaksanakan semula tetapi mungkin tidak disampaikan semula ke pelayan jika HTML disimpan dalam cache penyemak imbas. Penyemak imbas biasanya memberi amaran kepada pengguna bahawa data perlu disampaikan semula.
Jenis Pengekodan (atribut Enctype) Permohonan/X-www-form-urlencoded multipart/form-data atau aplikasi/x-www-form-urlencoded menggunakan pengekodan multipart untuk data binari.
Parameter boleh hantar tetapi data parameter terhad kepada apa yang dapat kita masukkan ke dalam talian permintaan (url). Paling selamat untuk menggunakan kurang daripada 2k parameter, beberapa pelayan mengendalikan sehingga 64k Boleh menghantar parameter, termasuk memuat naik fail, ke pelayan.
Digodam Lebih mudah menggodam kiddies skrip Lebih sukar untuk menggodam
Sekatan pada Jenis Data Borang Ya, hanya watak ASCII yang dibenarkan. Tiada sekatan. Data binari juga dibenarkan.
Keselamatan Dapatkan kurang selamat berbanding dengan pos kerana data yang dihantar adalah sebahagian daripada URL. Oleh itu, ia disimpan dalam sejarah penyemak imbas dan log pelayan dalam plaintext. Catatan sedikit lebih selamat daripada mendapatkan kerana parameter tidak disimpan dalam sejarah penyemak imbas atau dalam log pelayan web.
Sekatan pada Panjang Data Borang Ya, kerana data borang berada dalam url dan panjang url dihadkan. Had panjang url selamat sering 2048 aksara tetapi berbeza dengan penyemak imbas dan pelayan web. Tiada sekatan
Kebolehgunaan Dapatkan kaedah tidak boleh digunakan semasa menghantar kata laluan atau maklumat sensitif lain. Kaedah hantar digunakan semasa menghantar kata laluan atau maklumat sensitif lain.
Penglihatan Dapatkan kaedah dapat dilihat oleh semua orang (ia akan dipaparkan di bar alamat penyemak imbas) dan mempunyai had jumlah maklumat yang hendak dihantar. Pembolehubah kaedah pos tidak dipaparkan dalam URL.
Cache Boleh di -cache Tidak cache

Perbezaan dalam penyerahan borang

Perbezaan asas antara Kaedah = "Dapatkan" dan Kaedah = "Pos" adakah mereka sesuai dengan Permintaan HTTP yang berbeza, Seperti yang ditakrifkan dalam spesifikasi HTTP. Proses penyerahan untuk kedua -dua kaedah bermula dengan cara yang sama - set data borang dibina oleh penyemak imbas dan kemudian dikodkan dengan cara yang ditentukan oleh Enctype atribut. Untuk Kaedah = "Pos The Enctype atribut boleh Multipart/Form-Data atau Permohonan/X-www-form-urlencoded, sedangkan untuk Kaedah = "Dapatkan", hanya Permohonan/X-www-form-urlencoded dibenarkan. Set data borang ini kemudiannya dihantar ke pelayan.

Untuk penyerahan borang dengan kaedah = "mendapatkan", penyemak imbas membina URL dengan mengambil nilai tindakan atribut, memasuki a ? Kepada itu, kemudian tambah set data borang (dikodkan menggunakan jenis kandungan aplikasi/x-www-urlencoded). Pelayar kemudian memproses URL ini seolah -olah mengikuti pautan (atau seolah -olah pengguna telah menaip URL secara langsung). Penyemak imbas membahagikan URL ke bahagian dan mengiktiraf tuan rumah, kemudian menghantar ke tuan rumah itu mendapatkan permintaan dengan seluruh URL sebagai argumen. Pelayan mengambilnya dari sana. Perhatikan bahawa proses ini bermaksud bahawa data borang terhad kepada kod ASCII. Penjagaan khas harus diambil untuk mengekod dan menyahkod jenis watak lain ketika melewati mereka melalui URL dalam format ASCII.

Penyerahan borang dengan kaedah = "pos" menyebabkan permintaan pos dihantar, menggunakan nilai tindakan atribut dan mesej yang dibuat mengikut jenis kandungan yang ditentukan oleh Enctype atribut.

Kebaikan dan keburukan

Oleh kerana data borang dihantar sebagai sebahagian daripada URL ketika Dapatkan digunakan --

  • Data borang terhad kepada kod ASCII. Penjagaan khas harus diambil untuk mengekod dan menyahkod jenis watak lain ketika melewati mereka melalui URL dalam format ASCII. Sebaliknya, data binari, imej dan fail lain boleh dikemukakan melalui Kaedah = "Pos"
  • Semua data borang yang diisi dapat dilihat dalam URL. Selain itu, ia juga disimpan dalam sejarah/log pelayaran web pengguna untuk penyemak imbas. Isu -isu ini dibuat Dapatkan kurang selamat.
  • Walau bagaimanapun, satu kelebihan data borang yang dihantar sebagai sebahagian daripada URL adalah bahawa seseorang dapat menanda buku URL dan menggunakannya secara langsung dan memintas sepenuhnya proses pengisian borang.
  • Terdapat batasan berapa banyak data bentuk yang boleh dihantar kerana panjang URL adalah terhad.
  • Kiddies skrip dapat lebih mudah mendedahkan kelemahan dalam sistem untuk menggodamnya. Sebagai contoh, Citibank digodam dengan menukar nombor akaun dalam rentetan URL.[1] Sudah tentu, penggodam yang berpengalaman atau pemaju web boleh mendedahkan kelemahan tersebut walaupun Post digunakan; ia agak sukar. Secara umum, pelayan mesti mencurigakan sebarang data yang dihantar oleh klien dan pengawal terhadap rujukan objek langsung yang tidak selamat.

Perbezaan dalam pemprosesan sisi pelayan

Pada dasarnya, pemprosesan data borang yang dikemukakan bergantung kepada sama ada ia dihantar Kaedah = "Dapatkan" atau Kaedah = "Pos". Oleh kerana data dikodkan dengan cara yang berbeza, mekanisme penyahkodan yang berbeza diperlukan. Oleh itu, secara amnya, mengubah kaedah mungkin memerlukan perubahan dalam skrip yang memproses penyerahan. Sebagai contoh, apabila menggunakan antara muka CGI, skrip menerima data dalam pembolehubah persekitaran (querystring) ketika Dapatkan digunakan. Tetapi apabila Jawatan digunakan, borang data diluluskan dalam aliran input standard (stdin) dan bilangan bait yang hendak dibaca diberikan oleh pengepala kandungan panjang.

Apa yang Berlaku Apabila Get dan Post Pembolehubah Konflik?

Dalam sesetengah bahasa seperti PHP, maklumat dari parameter Get dan Post, sebagai tambahan kepada tersedia secara berasingan, juga digabungkan menjadi pemboleh ubah kemudahan e.g., $ _REQUEST dalam php. Sekiranya ada konflik-i.e., Nama parameter yang sama digunakan dengan nilai yang berbeza dalam get dan pasca-kemudian konflik diselesaikan dengan peraturan tertentu. Dalam kes PHP, keutamaan diputuskan oleh pembolehubah_order Arahan Konfigurasi. Pesanan lalai adalah EGPCS (persekitaran, mendapatkan, pos, cookie, pelayan). Ini bermakna pemboleh ubah dalam $ _get mendapat keutamaan lebih dari $ _post, yang seterusnya mendapat keutamaan lebih dari $ _cookie.

Penggunaan yang disyorkan

Dapatkan disyorkan apabila menyerahkan borang "idempotent" - yang tidak 'mengubah keadaan dunia dengan ketara'. Dengan kata lain, bentuk yang melibatkan pertanyaan pangkalan data sahaja. Perspektif lain ialah beberapa pertanyaan idempotent akan mempunyai kesan yang sama dengan satu pertanyaan. Sekiranya kemas kini pangkalan data atau tindakan lain seperti mencetuskan e -mel terlibat, penggunaan pos disyorkan.

Dari blog pemaju dropbox:

Penyemak imbas tidak tahu dengan tepat apa bentuk HTML tertentu, tetapi jika borang itu diserahkan melalui HTTP GET, penyemak imbas tahu ia selamat untuk mencuba semula penyerahan secara automatik jika ada ralat rangkaian. Untuk borang yang menggunakan pos http, mungkin tidak selamat untuk mencuba semula jadi penyemak imbas meminta pengguna untuk pengesahan terlebih dahulu.

Permintaan "get" sering boleh dicatatkan, sedangkan permintaan "pos" tidak mungkin. Untuk sistem pertanyaan ini mungkin mempunyai kesan kecekapan yang besar, terutamanya jika rentetan pertanyaan adalah mudah, kerana cache mungkin memberikan pertanyaan yang paling kerap.

Dalam kes tertentu, menggunakan Jawatan disyorkan walaupun untuk pertanyaan idempotent:

  • Sekiranya data borang mengandungi aksara bukan ascii (seperti aksara beraksen), maka Kaedah = "Dapatkan" tidak dapat digunakan secara prinsip, walaupun ia mungkin berfungsi dalam amalan (terutamanya untuk ISO Latin 1 aksara).
  • Sekiranya set data borang besar - katakan, beratus -ratus watak - kemudian Kaedah = "Dapatkan" boleh menyebabkan masalah praktikal dengan pelaksanaan yang tidak dapat mengendalikan URL yang panjang.
  • Anda mungkin ingin mengelakkan Kaedah = "Dapatkan" Untuk menjadikannya kurang dapat dilihat oleh pengguna bagaimana bentuknya berfungsi, terutamanya untuk menjadikan medan "tersembunyi" (jenis input = "tersembunyi") lebih tersembunyi dengan tidak muncul dalam URL. Tetapi walaupun anda menggunakan medan tersembunyi dengan Kaedah = "Pos", mereka masih akan muncul dalam kod sumber html.

Bagaimana dengan HTTPS?

Dikemaskini 15 Mei 2015: Khususnya apabila menggunakan HTTPS (HTTP melalui TLS/SSL), adakah pos menawarkan lebih banyak keselamatan daripada mendapatkan?

Ini adalah soalan yang menarik. Katakan anda membuat permintaan ke laman web:

 Dapatkan https: // www.Contoh.com/login.php?pengguna = mickey & passwd = mini 

Dengan mengandaikan bahawa sambungan internet anda sedang dipantau, maklumat mengenai permintaan ini akan tersedia kepada Snooper? Jika jawatan digunakan sebaliknya, dan data pengguna dan passwd dimasukkan ke dalam pembolehubah pasca, akan lebih selamat dalam hal sambungan HTTPS?

Jawapannya adalah tidak. Sekiranya anda membuat permintaan sedemikian, hanya maklumat berikut yang akan diketahui oleh penyerang memantau lalu lintas web anda:

  1. Hakikat bahawa anda membuat sambungan https
  2. Nama tuan rumah - www.Contoh.com
  3. Jumlah panjang permintaan
  4. Panjang tindak balas

Bahagian jalan url - i.e., Halaman sebenar yang diminta, serta parameter rentetan pertanyaan - dilindungi (disulitkan) semasa mereka "di atas dawai" i.e., dalam perjalanan dalam perjalanan ke pelayan destinasi. Keadaannya sama persis untuk permintaan pos.

The Jawatan Kaedah masih mengekalkan satu kelebihan walaupun dalam hal HTTPS, bagaimanapun. Pelayan web cenderung untuk log seluruh URL yang diminta dalam teks biasa dalam log akses mereka; Oleh itu, menghantar maklumat sensitif ke atas bukanlah idea yang baik. Ini terpakai tanpa mengira sama ada HTTP atau HTTPS digunakan.