Dari apa yang bisa saya kumpulkan, ada tiga kategori:
- Jangan pernah gunakan
GET
dan gunakanPOST
- Jangan pernah gunakan
POST
dan gunakanGET
- Tidak masalah yang mana yang Anda gunakan.
Apakah saya benar dalam mengasumsikan ketiga kasus tersebut? Jika demikian, apa saja contoh dari setiap kasus?
Jawaban:
Gunakan
POST
untuk tindakan destruktif seperti kreasi (saya menyadari ironi), mengedit, dan menghapus, karena Anda tidak dapat menemukanPOST
tindakan di bilah alamat browser Anda. GunakanGET
saat aman untuk mengizinkan seseorang memanggil tindakan. Jadi URL seperti:Seharusnya membawa Anda ke halaman konfirmasi, bukan hanya menghapus item. Jauh lebih mudah untuk menghindari kecelakaan dengan cara ini.
POST
juga lebih aman daripadaGET
, karena Anda tidak memasukkan informasi ke dalam URL. Dan menggunakanGET
sebagaimethod
untuk formulir HTML yang mengumpulkan kata sandi atau informasi sensitif lainnya bukanlah ide terbaik.Satu catatan terakhir:
POST
dapat mengirimkan informasi dalam jumlah yang lebih besar daripadaGET
. 'POST' tidak memiliki batasan ukuran untuk data yang dikirimkan, sementara 'GET' dibatasi hingga 2048 karakter.sumber
Secara singkat
GET
untuksafe and
idempotent
permintaanPOST
untukneither safe nor idempotent
permintaanSecara 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.
Sebuah
safe
operasi adalah operasi yang tidaknot change the data
diminta.Sebuah
idempotent
operasi adalah satu di mana hasilnya akanbe the same
tidak 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.
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).
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.
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.
sumber
Gunakan DAPATKAN jika Anda tidak keberatan dengan permintaan yang diulang (Artinya tidak berubah status).
Gunakan POST jika operasi mengubah kondisi sistem.
sumber
method
wajib)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:
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:
Kerugian dari POST:
Versi yang lebih panjang
Langsung dari Hypertext Transfer Protocol - HTTP / 1.1 :
sumber
Hal penting pertama adalah arti GET versus POST:
Setelah itu, beberapa hal yang bisa dicatat:
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 ;-)
sumber
http://example.com/var1/value1/var2/value2/var3/value3
kita bisa 'secara teknis' tidak punya GET lagi ...www.mypage.com/contact/
penggunaan GET secara internal untuk sesuatu sepertiindex.php?url=/contact/
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.
sumber
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.
sumber
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
textarea
di 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.sumber
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.
sumber
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.
sumber
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 :)
sumber
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.
sumber
1.3 Daftar Periksa Cepat untuk Memilih HTTP
GET
atauPOST
Gunakan DAPATKAN jika:
Gunakan POST jika:
Sumber .
sumber
Menggunakannya untuk memperbarui status - seperti MENDAPATKAN
delete.php?id=5
untuk 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.sumber
POST dapat memindahkan data besar sementara GET tidak bisa.
Tetapi umumnya ini bukan tentang kekurangan GET, melainkan sebuah konvensi jika Anda ingin situs web / webapp Anda berperilaku baik.
Lihat http://www.w3.org/2001/tag/doc/whenToUseGet.html
sumber
Dari RFC 2616 :
sumber
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.
sumber
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.
sumber
Baca artikel tentang HTTP di Wikipedia . Ini akan menjelaskan apa protokol itu dan apa fungsinya:
dan
W3C memiliki dokumen bernama URI, Addressability, dan penggunaan HTTP GET dan POST yang menjelaskan kapan harus menggunakan apa. Mengutip
dan
Contoh praktisnya adalah setiap kali Anda mengirimkan formulir HTML. Anda menentukan pos atau mendapatkan untuk tindakan formulir. PHP akan mengisi $ _GET dan $ _POST sesuai.
sumber
Di PHP,
POST
batas data biasanya ditentukan oleh Andaphp.ini
.GET
dibatasi oleh pengaturan server / browser saya percaya - biasanya sekitar255
byte.sumber
Dari w3schools.com :
Di sini kita membedakan perbedaan utama:
sumber
Versi sederhana dari POST GET PUT DELETE
sumber
Nah satu hal utama adalah apa pun yang Anda kirimkan
GET
akan diekspos melalui URL. Kedua seperti kata Ceejayoz, ada batasan karakter untuk URL.sumber
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.
sumber
expect: 100-continue
header, dan kemudian hanya mengirim data setelah server merespons dengan a100 CONTINUE
.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
$_REQUEST
untuk mengambil posting atau get. Orang harus menghindari ini demi yang lebih spesifik$_GET
atau$_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.
sumber
Gorgapor,
mod_rewrite
masih sering memanfaatkanGET
. Itu hanya memungkinkan untuk menerjemahkan URL yang lebih ramah ke dalam URL denganGET
string kueri.sumber
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:
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.
sumber