Saya telah melihat beberapa pertanyaan di sekitar sini seperti Cara men-debug layanan yang tenang , yang menyebutkan:
Sayangnya browser yang sama tidak memungkinkan saya untuk menguji HTTP PUT, DELETE, dan sampai tingkat tertentu bahkan HTTP POST.
Saya juga mendengar bahwa browser hanya mendukung GET dan POST, dari beberapa sumber lain seperti:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/[email protected]/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
Namun, beberapa tes cepat di Firefox menunjukkan bahwa pengiriman PUT
dan DELETE
permintaan berfungsi seperti yang diharapkan - XMLHttpRequest
penyelesaiannya berhasil, dan permintaan tersebut muncul di log server dengan metode yang tepat. Apakah ada beberapa aspek yang saya lewatkan, seperti kompatibilitas lintas-browser atau batasan yang tidak jelas?
http
cross-browser
browser
ajax
John Millikin
sumber
sumber
Jawaban:
Tidak. HTML 5 spec menyebutkan:
Yaitu bentuk HTML hanya mendukung GET dan POST sebagai metode permintaan HTTP. Solusi untuk ini adalah untuk tunnel metode lain melalui POST dengan menggunakan bidang formulir tersembunyi yang dibaca oleh server dan permintaan dikirim sesuai.
Namun, GET , POST , PUT dan DELETE yang didukung oleh implementasi dari XMLHttpRequest (yaitu AJAX panggilan) di semua web browser utama (IE, Firefox, Safari, Chrome, Opera).
sumber
Formulir HTML mendukung GET dan POST. (HTML5 pada satu titik menambahkan PUT / HAPUS, tetapi itu dibatalkan.)
XMLHttpRequest mendukung setiap metode, termasuk AYAM, meskipun beberapa nama metode dicocokkan dengan case-insensitive (metode adalah case-sensitive per HTTP) dan beberapa nama metode tidak didukung sama sekali untuk alasan keamanan (misalnya CONNECT).
Peramban secara perlahan melakukan konvergensi pada aturan yang ditentukan oleh XMLHttpRequest, tetapi seperti komentar lain menunjukkan masih ada beberapa perbedaan.
sumber
XMLHttpRequest
adalah objek standar dalam model Obyek JavaScript.Menurut Wikipedia,
XMLHttpRequest
pertama kali muncul di Internet Explorer 5 sebagai objek ActiveX, tetapi sejak itu telah dibuat menjadi standar dan telah dimasukkan untuk digunakan dalam JavaScript dalam keluarga Mozilla sejak 1.0, Apple Safari 1.2, Opera 7.60-p1, dan IE 7.0 .The
open()
metode pada objek mengambil Metode HTTP sebagai argumen - dan ditetapkan sebagai mengambil metode HTTP yang valid (lihat item nomor 5 link) - termasukGET
,POST
,HEAD
,PUT
danDELETE
, seperti yang ditentukan oleh RFC 2616 .Sebagai catatan, IE 7–8 hanya mengizinkan metode HTTP berikut: "DAPATKAN", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "PROPPATCH", "MKCOL" , "COPY", "LOCK", "UNLOCK", dan "OPTIONS" .
sumber
_method
solusi bidang tersembunyiDigunakan di Rails dan bisa disesuaikan dengan kerangka kerja apa pun:
tambahkan
_method
parameter tersembunyi ke formulir apa pun yang bukan GET atau POST:Ini dapat dilakukan secara otomatis dalam kerangka kerja melalui metode pembantu penciptaan HTML (misalnya Rails
form_tag
)perbaiki metode form aktual ke POST (
<form method="post"
)memproses
_method
di server dan melakukan persis seolah-olah metode itu telah dikirim, bukan POST yang sebenarnyaDasar pemikiran / sejarah mengapa itu tidak mungkin: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
sumber
Saya percaya komentar-komentar itu merujuk secara khusus ke browser, yaitu mengklik tautan dan mengirimkan formulir, bukan
XMLHttpRequest
.XMLHttpRequest
hanyalah klien khusus yang Anda tulis dalam JavaScript yang menggunakan browser sebagai runtime.UPDATE: Untuk memperjelas, saya tidak bermaksud (meskipun saya menulis) bahwa Anda menulis
XMLHttpRequest
; Maksud saya, Anda menulis kode yang digunakanXMLHttpRequest
. Browser tidak mendukung secara asliXMLHttpRequest
.XMLHttpRequest
berasal dari JavaScript runtime, yang mungkin dihosting oleh browser, meskipun tidak diharuskan (lihat Badak ). Itu sebabnya orang mengatakan browser tidak mendukungPUT
danDELETE
— karena sebenarnya JavaScript yang mendukungnya.sumber
it's actually JavaScript that is supporting them
. Tidak sepenuhnya benar.XMLHttpRequest
adalah 'host-object', artinya objek yang mengekspos fungsionalitas dari host ke kode Javascript. Itu bukan bagian dari JS itu sendiri.YA , PUT, HAPUS, KEPALA, dll. Metode HTTP tersedia di semua peramban modern.
Agar sesuai dengan browser Level 2 XMLHttpRequest harus mendukung metode ini. Untuk memeriksa browser mana yang mendukung XMLHttpRequest Level 2, saya sarankan CanIUse:
http://caniuse.com/#feat=xhr2
Hanya Opera Mini yang kekurangan dukungan atm (juli '15), tetapi Opera Mini tidak memiliki dukungan untuk semuanya. :)
sumber
Hanya untuk menambahkan - Safari 2 dan sebelumnya jelas tidak mendukung PUT dan DELETE. Saya mendapatkan kesan 3 lakukan, tetapi saya tidak memilikinya untuk menguji lagi. Safari 4 jelas mendukung PUT dan DELETE.
sumber