2013-05-29 10 views
29

Widzę ostatnio wiele frameworków, które zdecydowały się na "fałszywe" żądania PUT i DELETE. Podobnie jak Ruby on Rails. Wydaje się, że czekają, aż przeglądarki nadrobią zaległości. Czy czekają na próżno?Dlaczego przeglądarki nie obsługują żądań PUT i DELETE i kiedy one się pojawią?

Czy jest to nawet planowane do wdrożenia w dowolnym miejscu?

+1

Które operacje na poziomie przeglądarki wymagałyby semantyki "PUT" i "DELETE"? Możesz już generować działania HTTP 'PUT' i' DELETE' w sposób programistyczny. Po prostu nie mogę sobie wyobrazić, w jaki sposób można narazić je na użytkownika w przeglądarce (co by zrobił? PUT ?, gdy przeciągasz plik do przeglądarki?) – Gian

+0

Są one obsługiwane w żądaniach HTML5 i Ajax. – n1xx1

+0

@ N1xx1 tak w html5 mogłem zrobić

? Słodkie. Zajrzę w to. – pixelearth

Odpowiedz

53

Przeglądarki obsługują PUT i DELETE, ale to HTML że nie.

Na przykład przeglądarka zainicjuje żądanie PUT za pośrednictwem Javascript (AJAX), ale nie za pośrednictwem przesyłania HTML <form>.

Dzieje się tak, ponieważ HTML 4.01 i końcowa specyfikacja HTML HTML W3C mówią, że jedynymi metodami HTTP, na które powinny zezwalać na ich elementy form, są GET i POST.

Było dużo dyskusji na ten temat podczas opracowywania HTML 5, i w pewnym momencie zostały one dodane do HTML 5, a następnie ponownie usunięte. Powodem, dla którego dodatkowe metody zostały usunięte ze specyfikacji HTML 5, jest to, że przeglądarki HTML 4-poziomowe nigdy nie były w stanie ich obsługiwać (nie będąc częścią HTML w momencie ich tworzenia); i nie ma sposobu, aby pozwolić im to zrobić bez podkładki JavaScript; w związku z tym możesz równie dobrze używać AJAX.

stron internetowych starają się korzystać z formularzy z method="PUT" lub method="DELETE" byłoby spaść z powrotem do metody domyślnej GET dla wszystkich obecnych przeglądarek. Powoduje to przerwanie prób stosowania przez aplikacje internetowe odpowiednich metod w formularzach HTML do zamierzonego działania, a kończy się dając gorszy wynik - GET używany do usuwania rzeczy! (Cześć gąsienicowy. Och, ups! Tam jest moje bazy danych)

Zmiana metody domyślnej dla HTML <form> elementy do POST pomógłby (IMO domyślna powinna zawsze POST, odkąd Moasic * zadebiutowały formy w 1993 roku), ale zmiana ustawienia domyślnego zajęłaby co najmniej dekadę, aby przeniknąć przez zainstalowaną bazę. Tak więc w dwóch słowach: "ponieważ dziedzictwo". :-(

Wspieranie aktualnych przeglądarek, autorzy będą musieli udawać z ręcznym Polecam Autorzy wykorzystują powszechnie znane a, b_method argumentu za tym <input type=hidden name=_method value=DELETE> w ich HTML;. Przełączyć metodę formularz do POST (ponieważ żądanie jest niebezpieczne), a następnie dodaj rozpoznanie _method po stronie serwera, co powinno następnie zrobić wszystko, co konieczne, aby zmutować żądanie i przekazać dalej tak, jakby było prawdziwym żądaniem DELETE

Należy również pamiętać, że ponieważ Internet przeglądarki są ostatecznym klientem, muszą mieć ne w stanie do przesłania do nich w celu usunięcia żądań. istniejące API często zwracają 204 No Content dla takich żądań. Zamiast tego wyślij odpowiedź hipermedialną z linkami, aby użytkownik mógł przejść do stanu przeglądarki.

Zobacz także odpowiedzi na te pytania podobne/identyczne:


* Mosiac, utworzony przez Marc A ndreessen, także wprowadził błąd złożenia znacznika <img src=…> - powinien on być <image source=…>fallback</image>.

Powiązane problemy