Nhìn xung quanh, tôi không thể đặt tên cho một ứng dụng web đơn lẻ (không phải dịch vụ web) sử dụng bất cứ thứ gì ngoài yêu cầu GET và POST. Có lý do cụ thể nào cho điều này không? Một số trình duyệt (hoặc máy chủ) có hỗ trợ bất kỳ loại yêu cầu nào khác không? Hay điều này chỉ vì lý do lịch sử? Tôi muốn sử dụng các yêu cầu PUT và DELETE để làm cho cuộc sống của tôi dễ dàng hơn một chút ở phía máy chủ, nhưng tôi không muốn vì không có ai khác làm.Có lý do gì để không sử dụng HTTP PUT và DELETE trong một ứng dụng web không?
Trả lời
Thực tế, một số lượng người dùng khá bằng PUT và DELETE, chủ yếu là cho các API không phải trình duyệt. Một số ví dụ là Atom Publishing Protocol và các API dữ liệu của Google:
Ngoài ra, bạn không thấy PUT/DELETE áp dụng phổ biến bởi vì hầu hết các trình duyệt không hỗ trợ PUT và DELETE thông qua Biểu mẫu. HTML5 dường như được sửa chữa này:
Cách nó hoạt động cho các ứng dụng trình duyệt là: người thiết kế các ứng dụng RESTful với PUT và DELETE trong tâm trí, sau đó "đường hầm" những yêu cầu thông qua các bài viết từ các trình duyệt. Ví dụ, xem câu hỏi này SO về cách Ruby on Rails hoàn thành điều này sử dụng các trường ẩn:
Vì vậy, bạn sẽ không phải là ngày của riêng bạn thiết kế ứng dụng của bạn với các thiết lập lớn hơn của HTTP động từ trong tâm trí.
EDIT: Nhân tiện, nếu bạn tò mò về lý do tại sao PUT/DELETE bị thiếu trong các bài đăng trên biểu mẫu dựa trên trình duyệt, hóa ra không có lý do kỹ thuật thực sự tốt. Đọc xung quanh chủ đề này trên mailing list nghỉ ngơi-thảo luận, đặc biệt là ý kiến Roy Fielding, là thú vị đối với một số bối cảnh:
EDIT: Có một số ý kiến về việc liệu thư viện AJAX hỗ trợ tất cả các phương pháp . Nó đi xuống để thực hiện trình duyệt thực tế của XMLHttpRequest. Tôi nghĩ ai đó có thể tìm thấy liên kết này tiện dụng, kiểm tra trình duyệt của bạn để xem cách đối tượng HttpRequest tuân thủ với các tùy chọn HTTP khác nhau.
Thật không may, tôi không biết một tài liệu tham khảo mà thu thập những kết quả này.
Một số máy chủ proxy có chính sách bảo mật khó khăn có thể xóa chúng. Tôi đang sử dụng PUT và DELETE anyways.
Tôi đã đọc rằng một số trình duyệt không hỗ trợ các phương thức HTTP khác đúng cách, mặc dù tôi không thể nêu tên bất kỳ chi tiết cụ thể nào.
Rails, cụ thể, sẽ đóng gói biểu mẫu của bạn với thông số phương pháp để đặt rõ ràng điều này ngay cả khi trình duyệt không hỗ trợ các phương thức đó. Điều đó có vẻ như một biện pháp phòng ngừa hợp lý nếu bạn định làm điều này.
Rất đơn giản, các HTML 4.01 form
element chỉ cho phép các giá trị "POST
" và "GET
" trong method
thuộc tính của nó
Hmm, điều đó có ý nghĩa ... Nhưng điều này không áp dụng cho các yêu cầu Ajax, đúng không? Tôi có thể sử dụng bất cứ phương pháp nào tôi muốn? –
Nếu trình duyệt được xây dựng theo thông số kỹ thuật HTML 4.01, nó sẽ không hiểu bất cứ điều gì khác với thông số kỹ thuật. Đó là tất cả những gì bạn có thể giả định một trình duyệt có thể làm – Gareth
Các trình duyệt thường được xây dựng với nhiều hơn chỉ là một đặc tả HTML - JavaScript không phải là một phần của HTML 4.01. – aehlke
này phụ thuộc vào trình duyệt của bạn và thư viện Ajax. Ví dụ: jQuery hỗ trợ tất cả các phương thức HTTP mặc dù trình duyệt có thể không. Xem ví dụ: jQuery "ajax" documentation trên thuộc tính "loại".
Khung công tác Java Restlet Java cho phép bạn yêu cầu đường dẫn PUT và DELETE thông qua các thao tác HTML POST. Để làm điều này, bạn chỉ cần thêm method = đặt hoặc method = xóa để chuỗi truy vấn URI của bạn, ví dụ:
http://www.example.com/user=xyz?method=delete ...
Đây là giống như Ruby on Rails cách tiếp cận (như mô tả của @ars ở trên).
Từ tài liệu jQuery: "Các phương thức yêu cầu HTTP khác, chẳng hạn như PUT và DELETE, cũng có thể được sử dụng ở đây, nhưng chúng không được tất cả các trình duyệt hỗ trợ". Vì vậy, bạn sai về điều đó. –
Tôi nói sử dụng tất cả các tính năng của HTTP, trình duyệt bị hỏng, lol. Có lẽ nó sẽ truyền cảm hứng cho việc sử dụng giao thức HTTP hoàn chỉnh và thích hợp hơn trong tương lai. Có nhiều điều xảy ra trên mạng hơn là chỉ POST và GET. Giới thiệu về triển khai trình duyệt thời gian đã phản ánh điều này.
Haha, tôi ước Thật không may tôi không nghĩ rằng làm cho ứng dụng web của tôi * không hoạt động * sẽ làm bất cứ điều gì ngoài việc tức giận người dùng của tôi. :) –
hmmm ... vâng, tôi cho rằng bạn có một điểm. ồ, đó là một ý nghĩ hay. – codemonkey
nhưng chờ ... nó hoạt động cho microsoft ... – codemonkey
Cá nhân, tôi thực sự không thấy bất kỳ mục đích nào để sử dụng PUT hoặc DELETE trong ứng dụng web. Tất cả các hoạt động mà một ứng dụng thực hiện là đọc hoặc ghi, hay còn gọi là đầu vào đầu vào. Tại sao bạn cần phải phân biệt bản chất của hoạt động trong tiêu đề của yêu cầu HTTP? Tôi có thể thực hiện cuộc gọi ajax với cùng url của biểu mẫu/đối tượng/object_id và thực hiện nhiều thao tác như xóa, cập nhật, nhận giá trị hoặc tạo. Chỉ cần nhìn vào URL, tôi không biết đầu mối nào. Bằng cách sử dụng GET và POST chỉ, url của tôi sẽ là:
/đối tượng/id/xóa
/đối tượng/id/tạo
/đối tượng/id/cập nhật
/đối tượng/id -> ngụ ý GET
v.v.
Dựa trên kinh nghiệm hạn chế của tôi, đây là loại sạch hơn nhiều loại yêu cầu tiêu đề ẩn trong nhiều trường hợp. Tôi không nói người ta không bao giờ nên sử dụng PUT hoặc DELETE, chỉ cần nói, sử dụng chúng chỉ khi thật cần thiết.
Tham khảo "API Web RESTful" của Leonard Richardson để đọc thêm về các ca sử dụng và quy ước khác nhau về phương thức yêu cầu HTTP trong api web RESTful.
- 1. Tại sao sử dụng các phương thức HTTP PUT và DELETE thay vì POST?
- 2. mod_rewrite: Cách chuyển hướng DELETE HTTP và PUT
- 3. ASP.NET Xử lý PUT/DELETE động từ
- 4. Solr delete không làm việc vì một lý do
- 5. Lý do không sử dụng kiến trúc MVC cho ứng dụng web
- 6. Gói Elmah và Elmah.MVC Nuget - Sử dụng & lý do gì?
- 7. Lý do không sử dụng IFrame?
- 8. Lý do không sử dụng Thread.join()
- 9. Có lý do nào để không sử dụng pragma INLINABLE cho một chức năng không?
- 10. Xử lý các đối số PUT/DELETE trong PHP
- 11. Sinatra và http PUT
- 12. Sử dụng các phương pháp PUT và DELETE trong Spring MVC
- 13. Sự khác biệt giữa các phương thức HTTP GET, POST, PUT và DELETE
- 14. Phương thức RESTful Http DELETE trong .NET
- 15. HTTP POST và HTTP PUT
- 16. Bất kỳ lý do gì để vẫn sử dụng CVS?
- 17. Có lý do nào tốt để không sử dụng unicode thay vì chuỗi không?
- 18. Không phải là động từ HTTP PUT được sử dụng để cập nhật và không tạo nội dung?
- 19. Sử dụng Máy chủ web mỏng với HTTP và HTTPS
- 20. tại sao không sử dụng Thread.Sleep không có lý do, và giải thích cho một lập trình viên
- 21. Có ai đã sử dụng Lua để xây dựng một ứng dụng web không?
- 22. Có thành phần trình duyệt web nào để sử dụng trong ứng dụng FireMonkey không?
- 23. Có một lý do tại sao tôi không nên sử dụng NVARCHAR trong Sql Server?
- 24. Cách sử dụng cả máy chủ ứng dụng và máy chủ http trong ứng dụng web java
- 25. Có thể sử dụng các hội đồng WPF trong một ứng dụng web không?
- 26. Có lý do nào để sử dụng Object.create() hoặc mới trong JavaScript không?
- 27. Có lý do nào để không sử dụng AssertionHelper với NUnit không?
- 28. Trình duyệt nào không hỗ trợ DELETE HTTP với jQuery.ajax?
- 29. Có lý do nào không sử dụng UTF-8, 16, v.v. cho mọi thứ không?
- 30. Có bao giờ có lý do chính đáng để sử dụng Sắp xếp Chèn không?
Đoán xem cái gì? trong phiên bản mới nhất (ngày 19 tháng 10 năm 2010) hỗ trợ PUT/DELETE trong HTML5 có vẻ bị xóa. http://www.w3.org/TR/html5/forms.html#form-submission-0 –
@Xie: Thú vị tìm thấy. Có vẻ phản tác dụng với tôi ... –