HTML4 / XHTML1 hanya memungkinkan GET dan POST dalam bentuk, sekarang sepertinya HTML5 akan melakukan hal yang sama. Ada proposal untuk menambahkan keduanya tetapi tampaknya tidak mendapatkan daya tarik. Apa alasan teknis atau politik untuk tidak memasukkan PUT dan DELETE dalam konsep spesifikasi HTML5?
265
<form>
metode yang diizinkan .Jawaban:
Ini pertanyaan yang menarik. Jawaban lain di sini semuanya spekulatif, dan dalam beberapa kasus tidak benar. Alih-alih menulis pendapat saya di sini, saya malah melakukan riset dan menemukan sumber-sumber asli yang membahas mengapa delete and put bukan bagian dari standar bentuk HTML5.
Ternyata, metode ini dimasukkan dalam beberapa, konsep HTML5 awal (!), Tetapi kemudian dihapus dalam konsep berikutnya . Mozilla sebenarnya telah mengimplementasikan ini dalam Firefox beta juga.
Apa alasan untuk menghapus metode ini dari konsep? W3C membahas topik ini dalam laporan bug 10671 . Mike Amundsen berpendapat mendukung dukungan ini:
Perlu membaca seluruh posnya.
Tom Wardrop juga membuat poin yang menarik:
Bug itu akhirnya ditutup sebagai Tidak Akan Diperbaiki oleh Ian Hickson, dengan alasan berikut:
Namun, itu bukan akhir dari cerita! Masalah ini ditutup pada pelacak bug W3C dan meningkat ke pelacak masalah Kelompok Kerja HTML:
https://www.w3.org/html/wg/tracker/issues/195
Pada titik ini, tampaknya alasan utama mengapa tidak ada dukungan untuk metode ini adalah karena tidak ada yang meluangkan waktu untuk menulis spesifikasi komprehensif untuk itu.
sumber
GET dan POST memiliki dasar pemikiran konten-netral yang jelas. GET adalah untuk mengambil konten dari suatu URL dengan cara yang aman untuk diulang dan mungkin di-cache. POST adalah melakukan sesuatu dengan cara yang tidak aman untuk diulang, dieksekusi secara spekulatif, atau cache.
Tidak ada alasan serupa untuk PUT atau DELETE. Keduanya sepenuhnya tercakup oleh POST. Menciptakan atau menghancurkan sumber daya adalah operasi yang tidak aman untuk diulang, tidak aman untuk dieksekusi secara spekulatif, dan tidak boleh di-cache. Tidak ada semantik khusus tambahan yang diperlukan untuk mereka.
Jadi pada dasarnya tidak ada manfaatnya.
sumber
POST
adalah tidak idempoten yang mengapa ketika Anda klik "kembali" di browser Anda, maka akan muncul halaman jelek yang mengatakan bentuk kebutuhan untuk dikirim ulang. Namun , jika itu adalahPUT
, itu bisa dengan aman mengirim ulangPUT
permintaan untuk menampilkan halaman apa pun yang harus Anda dapatkan. Asalkan tentu saja orang tidak mengacaukan API dengan membuat semacamDELETE /resource/latest
.Ini dibesarkan pada 2010 karena Bug 10671 mempertimbangkan untuk menambahkan dukungan untuk PUT dan HAPUS sebagai metode formulir .
Ada sedikit pushback untuk "fitur" ini dan sedikit kesewenang-wenangan tetapi akhirnya ini meningkat sebagai dua masalah pada pelacak bug Kelompok Kerja:
Masalah ISSUE-196 menghasilkan keputusan konsensus untuk tidak melakukan perubahan pada spesifikasi karena spesifikasi HTML saat ini tidak membatasi bagaimana tanggapan terhadap permintaan POST ditangani. Saya percaya masalah khusus ini muncul dalam upaya untuk mendamaikan pola pengalihan POST yang umum digunakan dan bagaimana server RESTful sering memberikan respons 2xx dengan pesan singkat daripada sesuatu yang berguna untuk dirender di browser.
Masalah MASALAH 195 disajikan ke kursi. Cameron Jones melangkah menjadi sukarelawan dalam menulis proposal perubahan pada tanggal 18 Januari 2012 yang ia ajukan untuk menjadi draft kerja pertama pada tanggal 29 Mei 2014. Draft tersebut akan melalui proses rekomendasi W3C .
Dengan sedikit keberuntungan, ini akan segera menjadi rekomendasi W3C dan diimplementasikan oleh vendor browser, dan akan menjadi langkah maju yang baik dalam menghilangkan blocker untuk menghasilkan layanan ReSTful yang bersatu, semantik dan ramah browser. Saya membayangkan ini akan memicu evolusi yang menarik dalam pola layanan. Ada pembicaraan baik oleh Jon Moore - Hypermedia APIs layak ditonton, ini menarik minat saya tetapi jatuh pada rintangan pertama (yang ini).
sumber
Pemahaman saya adalah bahwa browser tidak tahu apa yang harus dilakukan setelah mereka mengirim PUT atau DELETE. POST biasanya akan dialihkan ke halaman yang sesuai, tetapi PUT dan DELETE biasanya tidak. Ini membuat mereka sesuai untuk menelepon melalui ajax atau program asli, tetapi tidak dari bentuk browser web.
Saya tidak dapat mencegahnya sekarang, tapi saya ingat pernah membaca salah satu milis html5 ketika mereka mendiskusikan hal ini.
sumber
Sejarah
Saya pikir layak menyebutkan penampilan pertama dari bentuk html di RFC1866 (Bagian 8.1) . Di sini atribut metode didefinisikan sebagai berikut:
Penjelasan lebih lanjut terdapat di Bagian 8.2.2 - GET dan Bagian 8.2.3 - POST
Perlu diingat, bahwa HTML 2.0 (November 1995) telah ditentukan sebelum HTTP 1.0 (Mei 1996). Jadi semua orang menggunakan HTTP hanya dengan GET (pada HTTP 0.9) atau dengan ekstensi POST. Tetapi hanya beberapa server web yang mendukung PUT dan DELETE (seperti yang disebutkan dalam Lampiran HTTP 1.0 ).
Pikiran
Jika Anda berpikir tentang bagaimana perkembangan web semantik Berners-Lee dapat berevolusi, tampak jelas bahwa itu berubah dari masalah aktual menjadi konsep umum. Pertama dia ingin berbagi dokumen. Karena itu ia perlu markup. Kemudian dia ingin meminta database untuk konten, jadi dia membutuhkan formulir. Kemudian dia ingin memasukkan data baru ke dalam database. Jadi dia menggunakan formulir dengan GET dan POST. Setelah itu dia mungkin menyadari bahwa Anda dapat melakukan setiap operasi CRUD pada data dari jarak jauh, sehingga HTTP diperpanjang tetapi tidak pernah HTML karena sudah terlambat (hanya beberapa server yang mendukung operasi CRUD baru).
sumber
Hanya membuang tebakan liar, tetapi mungkin karena HTTP tidak terlalu bagus dengan kontrol akses pada saat terbaik, dan hal terakhir yang dibutuhkan semua orang adalah lebih banyak cara bagi URL jahat untuk berkompromi dengan situs web dan / atau aplikasi yang tidak aman.
HTTP sebenarnya bukan protokol yang baik untuk transfer file selain mengunduh dari server ke klien. Gunakan FTP - atau lebih baik lagi, SFTP.
sumber
curl --request PUT http://A.B.c/index
Pertanyaannya adalah mengapa Anda bisa mengakses perintah-perintah ini melalui HTML.Dapatkan dan kirim adalah format pengiriman data permintaan.
Saya kira Anda bertanya tentang membuat pengiriman formulir ke layanan RESTFUL. Tetapi tidak masuk akal untuk mengubah standar permintaan http untuk membuat asumsi tujuan permintaan http. Informasi tentang tujuan yang diisi permintaan paling baik ditangani di bidang input.
Memiliki alamat dan mendapatkan dan memposting memungkinkan server untuk menginterpretasikan permintaan dan itu memasukkan nilai dengan benar. Dari sana, nilai input memungkinkan Anda untuk membuat permintaan terbuka ke server dan melakukan apa pun yang Anda inginkan. Misalnya, Anda dapat memiliki bidang yang nilainya "dimasukkan" dan "dihapus"
sumber