Kapan Anda menggunakan POST dan kapan Anda menggunakan GET?

343

Dari apa yang bisa saya kumpulkan, ada tiga kategori:

  1. Jangan pernah gunakan GETdan gunakanPOST
  2. Jangan pernah gunakan POSTdan gunakanGET
  3. Tidak masalah yang mana yang Anda gunakan.

Apakah saya benar dalam mengasumsikan ketiga kasus tersebut? Jika demikian, apa saja contoh dari setiap kasus?

Thomas Owens
sumber
1
Itu sebenarnya sama sekali tidak benar. DAPATKAN dan POST keduanya terlihat pada tingkat yang sama, jika Anda memeriksa tajuk yang dikirim oleh browser Anda, Anda akan melihat daftar pasangan nilai kunci yang Anda posting
Velimir Tchatchevsky
1
Tidak ada cara standar untuk menyandikan lebih dari nama -> pasangan nilai ke dalam string kueri jadi kecuali permintaan Anda sangat mendasar (yaitu tidak ada array atau struktur data bersarang), Anda harus mempertimbangkan POST saja yang menyediakan bidang isian yang dapat Anda gunakan dengan format penyandian (JSON, XML dll).
themihai

Jawaban:

376

Gunakan POSTuntuk tindakan destruktif seperti kreasi (saya menyadari ironi), mengedit, dan menghapus, karena Anda tidak dapat menemukan POSTtindakan di bilah alamat browser Anda. Gunakan GETsaat aman untuk mengizinkan seseorang memanggil tindakan. Jadi URL seperti:

http://myblog.org/admin/posts/delete/357

Seharusnya membawa Anda ke halaman konfirmasi, bukan hanya menghapus item. Jauh lebih mudah untuk menghindari kecelakaan dengan cara ini.

POSTjuga lebih aman daripada GET, karena Anda tidak memasukkan informasi ke dalam URL. Dan menggunakan GETsebagai methoduntuk formulir HTML yang mengumpulkan kata sandi atau informasi sensitif lainnya bukanlah ide terbaik.

Satu catatan terakhir: POSTdapat mengirimkan informasi dalam jumlah yang lebih besar daripada GET. 'POST' tidak memiliki batasan ukuran untuk data yang dikirimkan, sementara 'GET' dibatasi hingga 2048 karakter.

Brian Warshaw
sumber
82
Respons terhadap permintaan GET mungkin terhenti. Respons terhadap POST tidak boleh.
mkoeller
31
Bagaimana tidak menempelkan info di URL membuatnya lebih aman? (Btw, saya adalah salah satu dari mereka yang percaya bahwa rasa aman yang salah lebih berbahaya, daripada tidak memiliki keamanan sama sekali).
ePharaoh
42
@ePharaoh: Ini menghentikan orang membaca kata sandi dengan melihat ke bahu pengguna di bilah alamat.
Quentin
35
@ ePharaoh: "Mengungkap sedikit data ke pengamat biasa" mungkin akan menjadi formulasi yang lebih baik daripada "lebih aman" - URL mungkin berakhir di banyak tempat, seperti log, referensi, cache. Anda tentu saja, benar, ini tidak meningkatkan keamanan - tetapi membatasi praktik tidak aman yang terburuk (lihat juga: thedailywtf.com/Articles/The_Spider_of_Doom.aspx )
Piskvor meninggalkan gedung
24
@ David Dorward: Atau dengan nama yang lebih umum: serangan bahu
Idan K
206

Secara singkat

  • Gunakan GETuntuk safe andidempotentpermintaan
  • Gunakan POSTuntuk neither safe nor idempotentpermintaan

Secara rinci Ada tempat yang tepat untuk masing-masing. Bahkan jika Anda tidak mengikuti prinsip-prinsip RESTful , banyak yang dapat diperoleh dari belajar tentang REST dan bagaimana pendekatan berorientasi sumber daya bekerja.

Aplikasi TENANG akan use GETsuntuk operasi yang keduanya safe and idempotent.

Sebuah safeoperasi adalah operasi yang tidak not change the datadiminta.

Sebuah idempotentoperasi adalah satu di mana hasilnya akan be the sametidak peduli berapa kali Anda memintanya.

Masuk akal bahwa, ketika GET digunakan untuk operasi yang aman, mereka secara otomatis juga idempoten . Biasanya GET digunakan untuk mengambil sumber daya (pertanyaan dan jawaban terkait pada stack overflow misalnya) atau kumpulan sumber daya.

Aplikasi yang tenang akan digunakan PUTsuntuk operasi not safe but idempotent.

Saya tahu pertanyaannya adalah tentang GET dan POST, tapi saya akan kembali ke POST sebentar lagi.

Biasanya PUT digunakan untuk mengedit sumber daya (mengedit pertanyaan atau jawaban pada stack overflow misalnya).

A POSTakan digunakan untuk operasi apa pun neither safe or idempotent.

Biasanya POST akan digunakan untuk membuat sumber daya baru misalnya membuat pertanyaan SO BARU (meskipun dalam beberapa desain PUT akan digunakan untuk ini juga).

Jika Anda menjalankan POST dua kali, pada akhirnya Anda akan membuat DUA pertanyaan baru.

Ada juga operasi DELETE, tapi saya kira saya bisa membiarkannya di sana :)

Diskusi

Secara praktis, peramban web modern biasanya hanya mendukung GET dan POST secara andal (Anda dapat melakukan semua operasi ini melalui panggilan javascript, tetapi dalam hal memasukkan data dalam bentuk dan menekan kirim, Anda biasanya memiliki dua opsi). Dalam aplikasi RESTful POST akan sering diganti untuk memberikan panggilan PUT dan DELETE juga.

Tetapi, bahkan jika Anda tidak mengikuti prinsip RESTful, akan berguna untuk berpikir dalam hal menggunakan GET untuk mengambil / melihat informasi dan POST untuk membuat / mengedit informasi.

Anda tidak boleh menggunakan GET untuk operasi yang mengubah data. Jika mesin pencari merayapi tautan ke operasi jahat Anda, atau bookmark klien itu bisa menimbulkan masalah besar.

reefnet_alex
sumber
jika Anda akan membuat sumber daya APIREST untuk login yang akan Anda pilih, ini aman dan idempoten, saya harap.
jhonny lopez
1
Dapatkan aman tidak secara otomatis idempoten. Kumpulan hasil mungkin berbeda dengan kueri yang tidak merusak yang sama.
RichieHH
1
Cara Anda menulisnya, sesuatu seperti "DAPATKAN waktu sekarang" akan salah karena itu bukan idempoten (dalam arti bahwa permintaan berulang dapat menghasilkan hasil yang berbeda); sebenarnya apa pun yang dipertanyakan dapat berubah seiring waktu. Jadi orang harus mengekspresikan idempotensi bukan dalam hal efek samping dari permintaan itu sendiri. Karena hanya meminta waktu saat ini tidak memiliki efek samping , ini - seperti yang mungkin diharapkan - kandidat yang sempurna untuk GET dan bukan POST.
Hagen von Eitzen
79

Gunakan DAPATKAN jika Anda tidak keberatan dengan permintaan yang diulang (Artinya tidak berubah status).

Gunakan POST jika operasi mengubah kondisi sistem.

Douglas Leeder
sumber
1
Karena formulir mengubah status sistem, mengapa metode default tag formulir HTML adalah GET?
ziiweb
3
@ user248959 Apakah kotak pencarian mengubah status yang terlihat? Standarnya sudah lama, mungkin hampir tidak sengaja. Saya belum mempelajari sejarah bahkan untuk mengetahui apakah POST adalah opsi pada titik bentuk adalah pilihan.
Douglas Leeder
@ziiweb Bahkan jika sebagian besar kasus penggunaan <form> adalah POST, lebih baik untuk mendefinisikan dafault menjadi GET "tidak berbahaya". Ini mungkin tampak absurd dari sudut pandang keamanan ketika mengarah ke data yang diekspos dalam file log dll., Tetapi gagal-aman berkaitan dengan data sisi server (melayani tidak boleh memodifikasi data pada GET). Saya kira, orang akan menetapkan fokus secara berbeda hari ini (lebih disukai dengan menjatuhkan standar apa pun dan menjadikannya methodwajib)
Hagen von Eitzen
Misalkan saya memiliki titik akhir yang menerima file sebagai input, melakukan pemrosesan pada file (contoh - ekstrak data berdasarkan regex) dan mengembalikan data JSON, maka dapatkah saya menggunakan permintaan GET untuk mengunggah file ke server. Atau haruskah saya menggunakan permintaan POST?
variabel
67

Versi pendek

DAPATKAN: Biasanya digunakan untuk permintaan pencarian yang diajukan, atau permintaan mana pun yang Anda inginkan agar pengguna dapat menarik kembali halaman yang tepat.

Keuntungan dari GET:

  • URL dapat di-bookmark dengan aman.
  • Halaman dapat dimuat ulang dengan aman.

Kerugian dari GET:

POST: Digunakan untuk permintaan keamanan yang lebih tinggi di mana data dapat digunakan untuk mengubah database, atau halaman yang Anda tidak ingin orang tandai.

Keuntungan dari POST:

  • Pasangan nama-nilai tidak ditampilkan di url. (Keamanan + = 1)
  • Jumlah pasangan nama-nilai tanpa batas dapat dikirimkan melalui POST. Referensi.

Kerugian dari POST:

  • Halaman yang menggunakan data POST tidak boleh bookmark. (Jika Anda menginginkannya.)

Versi yang lebih panjang

Langsung dari Hypertext Transfer Protocol - HTTP / 1.1 :

9.3 DAPATKAN

Metode GET berarti mengambil informasi apa pun (dalam bentuk entitas) yang diidentifikasi oleh Request-URI. Jika Request-URI mengacu pada proses produksi data, itu adalah data yang dihasilkan yang akan dikembalikan sebagai entitas dalam respons dan bukan teks sumber dari proses, kecuali jika teks itu merupakan output dari proses tersebut.

Semantik dari metode GET berubah menjadi "GET bersyarat" jika pesan permintaan menyertakan If-Modified-Sejak, If-Unmodified-Sejak, If-Match, If-None-Match, atau If-Range header. Metode GET bersyarat meminta agar entitas ditransfer hanya dalam keadaan yang dijelaskan oleh bidang header kondisional. Metode GET bersyarat dimaksudkan untuk mengurangi penggunaan jaringan yang tidak perlu dengan memungkinkan entitas yang di-cache untuk di-refresh tanpa memerlukan beberapa permintaan atau mentransfer data yang sudah dipegang oleh klien.

Semantik metode GET berubah menjadi "GET sebagian" jika pesan permintaan menyertakan bidang header Rentang. Sebagian GET meminta agar hanya sebagian entitas yang ditransfer, seperti yang dijelaskan dalam bagian 14.35. Metode GET parsial dimaksudkan untuk mengurangi penggunaan jaringan yang tidak perlu dengan memungkinkan sebagian entitas yang diambil kembali diselesaikan tanpa mentransfer data yang sudah dipegang oleh klien.

Respons terhadap permintaan GET dapat di-cache jika dan hanya jika memenuhi persyaratan untuk cache HTTP yang dijelaskan di bagian 13.

Lihat bagian 15.1.3 untuk pertimbangan keamanan saat digunakan untuk formulir.

9,5 POST

Metode POST digunakan untuk meminta server asal menerima entitas yang dilampirkan dalam permintaan sebagai bawahan baru dari sumber daya yang diidentifikasi oleh Request-URI di Request-Line. POST dirancang untuk memungkinkan metode yang seragam untuk mencakup fungsi-fungsi berikut:

  • Penjelasan sumber daya yang ada;

  • Posting pesan ke papan buletin, newsgroup, milis, atau grup artikel serupa;

  • Memberikan blok data, seperti hasil pengiriman formulir, ke proses penanganan data;

  • Memperluas basis data melalui operasi penambahan.

Fungsi aktual yang dilakukan oleh metode POST ditentukan oleh server dan biasanya tergantung pada Request-URI. Entitas yang diposting lebih rendah dari URI dengan cara yang sama dengan file yang berada di bawah direktori yang memuatnya, artikel berita lebih rendah dari newsgroup yang diposkan, atau catatan lebih rendah dari database.

Tindakan yang dilakukan oleh metode POST mungkin tidak menghasilkan sumber daya yang dapat diidentifikasi oleh URI. Dalam hal ini, 200 (OK) atau 204 (Tidak Ada Konten) adalah status respons yang sesuai, tergantung pada apakah respons tersebut termasuk atau tidak entitas yang menggambarkan hasil.

Kesederhanaan
sumber
2
"Halaman yang menggunakan data posting tidak dapat di-bookmark": well, itu keuntungan, bukan? Anda mungkin tidak ingin kueri pengubah data di-bookmark.
Piskvor meninggalkan gedung
Saya kira jika setiap kali pos digunakan Anda menggunakannya untuk tujuan keamanan maka ini akan menjadi keuntungan. Biasanya begitu, tetapi ada batas panjang pada GET. Mungkin, seseorang hanya melewati satu ton data terkait non-keamanan dan ingin halaman tersebut akan ditandai? Siapa tahu ...
Cimplicity
Mengenai kerugian GET, yaitu bahwa "Variabel di-pacu melalui url sebagai pasangan nama-nilai", akankah MVC menghilangkan masalah itu karena perutean dan URL ramah yang dihasilkan?
MrBoJangles
@MrBoJangles: Menggunakan URL yang bagus tidak akan mencegah risiko 'orang melihat dari belakang'. Catatan: MVC tidak memerlukan perutean dengan URL yang bagus dan perutean dengan URL yang bagus tidak memerlukan MVC; mereka kadang-kadang digunakan bersama, tetapi juga dapat digunakan secara terpisah.
icktoofay
Di dunia .NET, untuk semua tujuan praktis, kemampuan url bagus = MVC. Saya kira Anda bisa melakukan beberapa penulisan ulang IIS atau beberapa yang aneh berbasis kode tetapi mereka bahkan kurang menyenangkan. MVC, tentu saja, untuk kemenangan itu.
MrBoJangles
28

Hal penting pertama adalah arti GET versus POST:

  • GET harus digunakan untuk ... mendapatkan ... beberapa informasi dari server,
  • sementara POST harus digunakan untuk mengirim beberapa informasi ke server.


Setelah itu, beberapa hal yang bisa dicatat:

  • Menggunakan GET, pengguna Anda dapat menggunakan tombol "kembali" di browser mereka, dan mereka dapat mem-bookmark halaman
  • Ada batasan dalam ukuran parameter yang dapat Anda berikan sebagai GET (2KB untuk beberapa versi Internet Explorer, jika saya tidak salah) ; batasnya lebih untuk POST, dan umumnya tergantung pada konfigurasi server.


Bagaimanapun, saya tidak berpikir kita bisa "hidup" tanpa GET: pikirkan berapa banyak URL yang Anda gunakan dengan parameter dalam string kueri, setiap hari - tanpa GET, semua itu tidak akan berfungsi ;-)

Pascal MARTIN
sumber
Nah, jika semua orang menggunakan url cantik dalam gaya GET: http://example.com/var1/value1/var2/value2/var3/value3kita bisa 'secara teknis' tidak punya GET lagi ...
Tyler Carter
5
@ Chacha102 Kecuali Anda masih harus MENDAPATKAN sumber daya itu. Hampir semua halaman, gambar, skrip, dll. Dimuat di browser web menggunakan GET.
Ryan
3
@ Chacha102 - Bahkan www.mypage.com/contact/penggunaan GET secara internal untuk sesuatu sepertiindex.php?url=/contact/
Thiago Belem
1
Penekanan pada batas ukuran GET! Juga, parameter GET disertakan dalam bookmark, sedangkan POST tidak. Dan, pengguna dapat me-refresh halaman yang diminta GET tetapi tidak yang diminta POST (tanpa peringatan tentang mengirim ulang info).
Ricket
12

Terlepas dari perbedaan batasan panjang di banyak browser web, ada juga perbedaan semantik. GET seharusnya "aman" karena hanya baca-operasi yang tidak mengubah status server. POST biasanya akan berubah status dan akan memberikan peringatan saat pengiriman ulang. Perayap web mesin pencari mungkin membuat GET tetapi tidak boleh membuat POST.

Gunakan DAPATKAN jika Anda ingin membaca data tanpa mengubah status, dan gunakan POST jika Anda ingin memperbarui status di server.

Mark Byers
sumber
+1. Ini adalah perbedaan konseptual kunci dari rfc dari mana segala sesuatu mengikuti. w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
Frank Farmer
8

Aturan umum saya adalah menggunakan Get ketika Anda membuat permintaan ke server yang tidak akan mengubah status. Posting disediakan untuk permintaan ke server yang mengubah keadaan.

TonyLa
sumber
8

Satu perbedaan praktis adalah bahwa browser dan server web memiliki batasan pada jumlah karakter yang dapat ada dalam URL. Ini berbeda dari aplikasi ke aplikasi, tetapi tentu saja mungkin untuk memukulnya jika Anda punya textareadi formulir Anda.

Gotcha lain dengan GET - mereka diindeks oleh mesin pencari dan sistem otomatis lainnya. Google pernah memiliki produk yang akan mengambil lebih dulu tautan pada halaman yang Anda lihat, sehingga mereka akan lebih cepat memuat jika Anda mengklik tautan tersebut. Ini menyebabkan kerusakan besar pada situs-situs yang memiliki tautan seperti delete.php?id=1- orang-orang kehilangan seluruh situs mereka.

ceejayoz
sumber
1
Server web Anda mungkin juga memiliki batasan untuk ini.
Billy ONeal
Yah, ada batasan untuk POST juga.
chelmertz
1
Poin bagus, @BillyONeal, saya sudah menambahkannya. @Chelmertz Ya, tapi saya bisa mengubahnya jika saya mau, dan itu jauh lebih tinggi. Saya sudah POST 1 file gigabyte ke instance Apache, misalnya.
ceejayoz
Saya mengerti URL diindeks oleh mesin pencari. Saya tidak mengerti apa hubungannya dengan GET. Maksud saya bukan URL hanya URL?
Sayang
1
@Honey Mesin pencari mengikuti tautan. Tautan membuat permintaan GET. Mesin pencari tidak mengirimkan formulir (jika mereka melakukannya, Anda akan melihat Google mendaftar akun di situs Anda setiap beberapa hari) dan karenanya tidak membuat permintaan POST.
ceejayoz
7

Gunakan DAPATKAN ketika Anda ingin URL untuk mencerminkan keadaan halaman. Ini berguna untuk melihat halaman yang dihasilkan secara dinamis, seperti yang terlihat di sini. POST harus digunakan dalam formulir untuk mengirimkan data, seperti ketika saya mengklik tombol "Posting Jawaban Anda". Ini juga menghasilkan URL yang lebih bersih karena tidak menghasilkan string parameter setelah path.

Kyle Cronin
sumber
6

Karena GET adalah URL murni, mereka dapat di-cache oleh browser web dan mungkin lebih baik digunakan untuk hal-hal seperti gambar yang dihasilkan secara konsisten. (Tetapkan waktu kedaluwarsa)

Salah satu contoh dari halaman gravatar: http://www.gravatar.com/[/4c3be63a4c2f539b013787725dfce802?d=monsterid

DAPATKAN membuat kinerja yang sedikit lebih baik, beberapa webservers menulis konten POST ke file sementara sebelum memanggil pawang.

Hal lain yang perlu dipertimbangkan adalah batas ukuran. GET dibatasi oleh ukuran URL, 1024 byte oleh standar, meskipun browser mungkin mendukung lebih banyak.

Mentransfer lebih banyak data daripada yang seharusnya menggunakan POST untuk mendapatkan kompatibilitas browser yang lebih baik.

Bahkan kurang dari batas itu merupakan masalah, seperti yang ditulis oleh poster lain, apa pun di URL dapat berakhir di bagian lain dari browser UI, seperti sejarah.

davenpcj
sumber
4

Tidak ada yang tidak bisa Anda lakukan sendiri. Intinya adalah Anda tidak seharusnya memodifikasi status server pada HTTP GET. Proxy HTTP mengasumsikan bahwa karena HTTP GET tidak mengubah keadaan maka apakah pengguna memanggil HTTP GET satu kali atau 1000 kali tidak ada bedanya. Menggunakan informasi ini mereka menganggap aman untuk mengembalikan versi cache GET HTTP pertama yang di-cache. Jika Anda melanggar spesifikasi HTTP, Anda berisiko melanggar klien HTTP dan proksi di alam liar. Jangan lakukan itu :)

Gili
sumber
Bukan hanya peramban yang mengandalkan GET menjadi aman dan idempoten: spider mesin telusur dan peramban prefetching (seperti fastfox) juga mengandalkan ini.
Frank Farmer
@ gili, akhirnya seseorang dengan jawaban yang benar. Saya benar-benar terkejut berapa banyak orang yang salah dalam hal ini. jempolan!
lubos hasko
4

Ini melintasi ke konsep REST dan bagaimana web itu dimaksudkan untuk digunakan. Ada podcast yang sangat baik di radio Rekayasa Perangkat Lunak yang memberikan pembicaraan mendalam tentang penggunaan Get and Post.

Biasakan untuk mengambil data dari server, di mana tindakan pembaruan tidak diperlukan. Idenya adalah bahwa Anda harus dapat menggunakan permintaan GET yang sama berulang-ulang dan mendapatkan informasi yang sama. URL memiliki informasi get dalam string kueri, karena itu dimaksudkan untuk dapat dengan mudah dikirim ke sistem lain dan orang-orang menyukai alamat di mana menemukan sesuatu.

Post seharusnya digunakan (paling tidak oleh arsitektur REST yang menjadi dasar web) untuk mendorong informasi ke server / memberi tahu server untuk melakukan suatu tindakan. Contohnya seperti: Perbarui data ini, Buat catatan ini.

kemiller2002
sumber
"Ada podcast yang luar biasa di radio Rekayasa Perangkat Lunak yang memberikan pembicaraan mendalam tentang penggunaan Get and Post." Dimana itu?
yeeen
Saya telah menambahkan tautan ke sana.
kemiller2002
Inilah tautannya : sekradio.net/2008/05/episode-98-stefan-tilkov-on-rest Saya juga mengedit tautan di atas, meskipun saya tidak memiliki hak pengeditan dan harus ditinjau oleh rekan sejawat, dll.
MrBoJangles
Misalkan saya memiliki titik akhir yang menerima file sebagai input, melakukan pemrosesan pada file (contoh - ekstrak data berdasarkan regex) dan mengembalikan data JSON, maka dapatkah saya menggunakan permintaan GET untuk mengunggah file ke server. Atau haruskah saya menggunakan permintaan POST?
variabel
4

1.3 Daftar Periksa Cepat untuk Memilih HTTP GETatauPOST

Gunakan DAPATKAN jika:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Gunakan POST jika:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Sumber .

Anagha
sumber
3

saya tidak melihat masalah menggunakan get, saya menggunakannya untuk hal-hal sederhana di mana masuk akal untuk menyimpan sesuatu pada string kueri.

Menggunakannya untuk memperbarui status - seperti MENDAPATKAN delete.php?id=5untuk menghapus halaman - sangat berisiko. Orang-orang mengetahui hal itu ketika akselerator web Google mulai mengambil URL di halaman - itu mengenai semua tautan 'hapus' dan menghapus data orang. Hal yang sama dapat terjadi dengan spider mesin pencari.

ceejayoz
sumber
3

Dari RFC 2616 :

9.3 GET
Metode GET berarti mengambil informasi apa pun (dalam bentuk entitas) yang diidentifikasi oleh Request-URI. Jika Permintaan-URI mengacu pada proses produksi data, itu adalah data yang dihasilkan yang akan dikembalikan sebagai entitas dalam respons dan bukan teks sumber proses, kecuali jika teks tersebut merupakan output dari proses tersebut.


9.5 POST
Metode POST digunakan untuk meminta server asal menerima entitas yang dilampirkan dalam permintaan sebagai bawahan baru dari sumber daya yang diidentifikasi oleh Request-URI di dalam Request-Line. POST dirancang untuk memungkinkan metode yang seragam untuk mencakup fungsi-fungsi berikut:

  • Penjelasan sumber daya yang ada;
  • Posting pesan ke papan buletin, newsgroup, milis, atau grup artikel serupa;
  • Memberikan blok data, seperti hasil pengiriman formulir, ke proses penanganan data;
  • Memperluas basis data melalui operasi penambahan.

Fungsi aktual yang dilakukan oleh metode POST ditentukan oleh server dan biasanya tergantung pada Request-URI. Entitas yang diposting lebih rendah dari URI dengan cara yang sama dengan file yang berada di bawah direktori yang memuatnya, artikel berita lebih rendah dari newsgroup yang diposkan, atau catatan lebih rendah dari database.

Tindakan yang dilakukan oleh metode POST mungkin tidak menghasilkan sumber daya yang dapat diidentifikasi oleh URI. Dalam hal ini, 200 (OK) atau 204 (Tidak Ada Konten) adalah status respons yang sesuai, tergantung pada apakah respons tersebut termasuk atau tidak entitas yang menggambarkan hasil.

Dmytro
sumber
2

Saya menggunakan POST ketika saya tidak ingin orang melihat QueryString atau ketika QueryString menjadi besar. Juga, POST diperlukan untuk mengunggah file.

Saya tidak melihat masalah menggunakan GET, saya menggunakannya untuk hal-hal sederhana di mana masuk akal untuk menjaga hal-hal di QueryString.

Menggunakan GET akan memungkinkan penautan ke laman tertentu juga di tempat POST tidak berfungsi.

John Boker
sumber
Mengapa kami tidak bisa menggunakan GET untuk mengunggah file?
variabel
1

Maksud aslinya adalah bahwa GET digunakan untuk mendapatkan kembali data dan POST adalah untuk menjadi apa saja. Aturan praktis yang saya gunakan adalah bahwa jika saya mengirim sesuatu kembali ke server, saya menggunakan POST. Jika saya hanya memanggil URL untuk mendapatkan kembali data, saya menggunakan GET.

Chris Miller
sumber
1

Baca artikel tentang HTTP di Wikipedia . Ini akan menjelaskan apa protokol itu dan apa fungsinya:

DAPATKAN

Meminta representasi sumber yang ditentukan. Perhatikan bahwa GET tidak boleh digunakan untuk operasi yang menyebabkan efek samping, seperti menggunakannya untuk mengambil tindakan dalam aplikasi web. Salah satu alasannya adalah bahwa GET dapat digunakan secara sewenang-wenang oleh robot atau perayap, yang seharusnya tidak perlu mempertimbangkan efek samping yang ditimbulkan oleh permintaan.

dan

POST Mengirimkan data yang akan diproses (misalnya, dari formulir HTML) ke sumber yang diidentifikasi. Data termasuk dalam isi permintaan. Ini dapat menghasilkan penciptaan sumber daya baru atau pembaruan sumber daya yang ada atau keduanya.

W3C memiliki dokumen bernama URI, Addressability, dan penggunaan HTTP GET dan POST yang menjelaskan kapan harus menggunakan apa. Mengutip

1.3 Daftar Periksa Cepat untuk Memilih HTTP GET atau POST

  • Gunakan DAPATKAN jika:
    • Interaksi lebih seperti pertanyaan (yaitu, itu adalah operasi yang aman seperti permintaan, operasi baca, atau pencarian).

dan

  • Gunakan POST jika:
    • Interaksi lebih seperti pesanan, atau
    • Interaksi mengubah keadaan sumber daya dengan cara yang akan dirasakan pengguna (misalnya, berlangganan layanan), atau o Pengguna bertanggung jawab atas hasil interaksi.

Namun, sebelum keputusan akhir untuk menggunakan HTTP GET atau POST, harap pertimbangkan juga pertimbangan untuk data sensitif dan pertimbangan praktis.

Contoh praktisnya adalah setiap kali Anda mengirimkan formulir HTML. Anda menentukan pos atau mendapatkan untuk tindakan formulir. PHP akan mengisi $ _GET dan $ _POST sesuai.

Gordon
sumber
1

Di PHP, POSTbatas data biasanya ditentukan oleh Anda php.ini. GETdibatasi oleh pengaturan server / browser saya percaya - biasanya sekitar 255byte.

ubur-ubur
sumber
1

Dari w3schools.com :

Apa itu HTTP?

Hypertext Transfer Protocol (HTTP) dirancang untuk memungkinkan komunikasi antara klien dan server.

HTTP berfungsi sebagai protokol permintaan-respons antara klien dan server.

Browser web mungkin klien, dan aplikasi di komputer yang meng-host situs web mungkin server.

Contoh: Seorang klien (browser) mengirimkan permintaan HTTP ke server; kemudian server mengembalikan respons ke klien. Respons berisi informasi status tentang permintaan dan mungkin juga berisi konten yang diminta.

Dua Metode Permintaan HTTP: GET dan POST

Dua metode yang biasa digunakan untuk permintaan-respons antara klien dan server adalah: GET dan POST.

DAPATKAN - Meminta data dari sumber daya tertentu POST - Mengirimkan data untuk diproses ke sumber daya tertentu

Di sini kita membedakan perbedaan utama:

masukkan deskripsi gambar di sini

Madhusudhan Reddy
sumber
1
Akan jauh lebih baik bagi pencari dan pembaca untuk memasukkan konten gambar ke dalam jawabannya. Juga, bagian pertama dari jawaban tidak benar-benar membantu dalam menjawab pertanyaan.
Dave Schweisguth
Salin tempel dari sini - Anda harus mengutip sumber Anda dengan benar dan lisensi dari sumber tersebut harus mengizinkan penggunaan kembali, yang menurut saya tidak dilakukan oleh w3schools. Terlepas dari itu, apakah Anda benar-benar berpikir ini menambah sesuatu yang tidak tercakup dalam 25 jawaban lainnya?
Benjamin W.
1

Versi sederhana dari POST GET PUT DELETE

  • gunakan GET - ketika Anda ingin mendapatkan sumber daya seperti Daftar data berdasarkan Id atau Nama apa pun
  • gunakan POST - ketika Anda ingin mengirim data apa pun ke server. perlu diingat POST adalah operasi yang berat karena untuk pembaruan kita harus menggunakan PUT daripada POST secara internal POST akan menciptakan sumber daya baru
  • gunakan PUT - saat Anda
Rajesh
sumber
4
"gunakan PUT - when you" Di mana sisa kalimatnya?
Pang
Sangat bagus bahwa seseorang menyukai dua peluru pertama dari jawaban ini dengan sangat jelas sehingga mereka membatalkannya tanpa peluru akhir haha: '-)
pooley1994
0

Nah satu hal utama adalah apa pun yang Anda kirimkan GETakan diekspos melalui URL. Kedua seperti kata Ceejayoz, ada batasan karakter untuk URL.

prodigitalson
sumber
0

Perbedaan lainnya adalah bahwa POST umumnya membutuhkan dua operasi HTTP, sedangkan GET hanya memerlukan satu operasi.

Sunting: Saya harus mengklarifikasi - untuk pola pemrograman umum. Secara umum menanggapi POST dengan halaman web HTML yang lurus adalah desain yang dipertanyakan karena berbagai alasan, salah satunya adalah "Anda harus mengirim ulang formulir ini, apakah Anda ingin melakukannya?" pada menekan tombol kembali.

Plynx
sumber
2
POST tidak memerlukan 2 operasi http.
Billy ONeal
3
post-redirect-get memerlukan 2 operasi: en.wikipedia.org/wiki/Post/Redirect/Dapatkan
cherouvim
1
POST mungkin memerlukan 2 round trip ke server - pola umum adalah POST dengan expect: 100-continueheader, dan kemudian hanya mengirim data setelah server merespons dengan a 100 CONTINUE.
Frank Farmer
Artikel bagusnya cherouvim, aku tidak pernah tahu polanya memiliki nama.
Plynx
@cherouvim: Posting redirect get do, tapi postingan polos tidak. Anda bisa mendapatkan redirect dengan hasil yang sama. Ini tidak ada hubungannya dengan protokol yang digunakan formulir Anda untuk pengiriman.
Billy ONeal
0

Seperti yang dijawab oleh orang lain, ada batasan pada ukuran url dengan get, dan file dapat dikirimkan hanya dengan posting.

Saya ingin menambahkan bahwa seseorang dapat menambahkan sesuatu ke database dengan mendapatkan dan melakukan tindakan dengan posting. Ketika sebuah skrip menerima posting atau get, ia dapat melakukan apa pun yang penulis inginkan. Saya percaya kurangnya pemahaman berasal dari kata-kata yang dipilih buku atau bagaimana Anda membacanya.

Penulis skrip harus menggunakan posting untuk mengubah database dan menggunakan hanya mendapatkan untuk pengambilan informasi.

Bahasa scripting menyediakan banyak cara untuk mengakses permintaan. Sebagai contoh, PHP memungkinkan penggunaan $_REQUESTuntuk mengambil posting atau get. Orang harus menghindari ini demi yang lebih spesifik $_GETatau $_POST.

Dalam pemrograman web, ada lebih banyak ruang untuk interpretasi. Ada apa yang harus dan apa yang bisa dilakukan, tetapi mana yang lebih baik sering diperdebatkan. Untungnya, dalam hal ini, tidak ada ambiguitas. Anda harus menggunakan posting untuk mengubah data, dan Anda harus menggunakan untuk mengambil informasi.

Elizabeth Buckwalter
sumber
0

Gorgapor, mod_rewritemasih sering memanfaatkan GET. Itu hanya memungkinkan untuk menerjemahkan URL yang lebih ramah ke dalam URL dengan GETstring kueri.

Brian Warshaw
sumber
-1

Data HTTP Post tidak memiliki batas yang ditentukan pada jumlah data, di mana browser yang berbeda memiliki batas yang berbeda untuk GET. RFC 2068 menyatakan:

Server harus berhati-hati tergantung pada panjang URI di atas 255 byte, karena beberapa klien yang lebih tua atau implementasi proxy mungkin tidak mendukung panjang ini dengan benar

Khususnya Anda harus membangun HTTP yang tepat untuk apa mereka digunakan. HTTP GET seharusnya tidak memiliki efek samping dan dapat disegarkan dengan aman dan disimpan oleh Proxy HTTP, dll.

HTTP POST digunakan ketika Anda ingin mengirimkan data terhadap sumber daya url.

Contoh khas untuk menggunakan HTTP GET adalah pada Pencarian, mis. Pencarian? Kueri = kueri + saya Contoh khas untuk menggunakan HTTP POST mengirimkan umpan balik ke formulir online.

mitos
sumber