Questa è una domanda affascinante. Le altre risposte qui sono tutte speculative e in alcuni casi non corrette. Invece di scrivere la mia opinione qui, ho effettivamente fatto qualche ricerca e ho trovato fonti originali che discutono sul perché delete e put non fanno parte dello standard del modulo HTML5.
Come risulta, questi metodi erano inclusi in diverse bozze iniziali HTML5 (!), ma successivamente sono state rimosse in bozze successive . Mozilla aveva effettivamente implementato questo in una versione beta di Firefox , anche.
Qual è stata la motivazione per la rimozione di questi metodi dalla bozza? Il W3C ha discusso questo argomento in rapporto sui bug 10671 . Mike Amundsen ha sostenuto a favore di questo supporto:
Executing PUT and DELETE to modify resources on the origin server is straight-forward for modern Web browsers using the XmlHttpRequest object. For unscripted browser interactions this not so simple. [...]
This pattern is required so often that several commonly-used Web frameworks/libraries have created a "built-in" work-around. [...]
Other considerations:
- Using POST as a tunnel instead of using PUT/DELETE can lead to caching mis-matches (e.g. POST responses are cachable, PUT responses are not(6), DELETE responses are not(7))
- Using a non-idempotent method (POST) to perform an idempotent operation (PUT/DELETE) complicates recovery due to network failures (e.g. "Is is safe to repeat this action?").
- [...]
Vale la pena leggere il suo intero post.
Tom Wardrop fa anche un punto interessante:
HTML is inextricably bound to HTTP. HTML is the human interface of HTTP. It's therefore automatically questionable why HTML does not support all relevant methods in the HTTP specification. Why can machines PUT and DELETE resources, but humans cannot? [...]
It's contradictory that while HTML goes to great lengths to ensure semantic markup, it has to date made no such effort to ensure semantic HTTP requests.
Il bug è stato infine chiuso come Non sarà risolto da Ian Hickson, con le seguenti motivazioni:
PUT as a form method makes no sense, you wouldn't want to PUT a form payload. DELETE only makes sense if there is no payload, so it doesn't make much sense with forms either.
Tuttavia, questa non è la fine della storia! Il problema è stato chiuso nel bug tracker del W3C e intensificato nel tracker dei problemi del gruppo di lavoro HTML:
link
A questo punto, sembra che il motivo principale per cui non c'è supporto per questi metodi è semplicemente che nessuno ha avuto il tempo di scrivere una specifica completa per questo.