Bir obyekt obyekti HTTP DELETE sorğusu üçün icazə mi verilir?

Bir HTTP DELETE sorğusu verilərkən, sorğu URI silinəcək qaynağı tamamilə müəyyən etməlidir. Buna baxmayaraq, istək obyekti bədəninin bir hissəsi kimi əlavə metadata əlavə etmək mümkündürmü?

511
18 нояб. qurulan 18 nov tərəfindən təyin olundu . 2008-11-18 21:14 '08 saat 09:14 'da 2008-11-18 21:14
@ 11 cavab

Texniki şərt açıqca qadağan etmir və ya bunu qadağan etmir, ona görə icazə verilir.

MSDN məqaləsi ADO.NET Çərçivə data xidmətləri üçün DELETE metodu ilə bağlı danışıb Microsoft (eyni zamanda tamaşaçılarda nifrət duyur)

Bir DELETE sorğu bir obyektin cismini içərsə, cəsəd məhəl qoyulmur [...]

Bundan əlavə, burada RFC2616 (HTTP 1.1) tələblərinə görə demək lazımdır:

  • cisim obyekti yalnız mesajın cismi olduqda mövcuddur (bölmə 7.2).
  • mesaj orqanının varlığı bir Content-Length başlığı və ya Transfer-Encoding (bölmə 4.3)
  • sorğu metodunun dəqiqləşdirilməsi müəssisənin orqanına göndərilməsinə imkan vermədikdə mesaj orqanı daxil edilməməlidir (Bölmə 4.3).
  • bədən obyekti TRACE sorgularında açıq şəkildə qadağandır, digər bütün sorğu növləri isə məhdud deyil (xüsusi 9 və 9.8 bölmələri)

Cavablar üçün bu müəyyən edilmişdir:

  • istək metoduna və cavabın vəziyyətinə (mesaj 4.3-cü bəndinə) uyğun olaraq,
  • Mesajın cəsədi HEAD tələblərinə cavab olaraq açıq şəkildə qadağandır (xüsusən 9 və 9.4 bölmələrində).
  • Mesaj orqanı 1xx (informasiya), 204 (məzmunsuz) və 304 (dəyişməz) cavabı (bölmə 4.3) açıq şəkildə qadağandır.
  • sıfır uzunluğu olmasına baxmayaraq bütün digər cavablar mesaj orqanı daxildir (bölmə 4.3)
418
18 нояб. cavab Tomalak 18 noyabrda verilir . 2008-11-18 21:36 '08 at 21:36 pm 2008-11-18 21:36

HTTP 1.1 spesifikasiyasına ( RFC 7231 ) son yeniləmə DELETE sorğusunda obyektləri açıq şəkildə həll edir:

border=0

DELETE tələb mesajında ​​payload xüsusi bir semantikə malik deyil; bir DELETE sorğusu üçün bir payload orqanı göndərilməsi bəzi mövcud tətbiqlərin istəkləri rədd etməsinə səbəb ola bilər.

117
04 апр. cavab 04 mart apreldır . 2012-04-04 19:49 '12 at 7:49 PM 2012-04-04 19:49

Tomcat və Jetty'nin bəzi versiyaları, əgər varsa, obyektin cismini görməməz görünür. Əgər onu almaq niyyətindədirsə, nə bir çətinlik ola bilər.

48
15 янв. evan.leonard tərəfindən verilmiş cavabı Jan 15 2010-01-15 22:56 '10 at 10:56 pm 2010-01-15 22:56

Optimist eşzamanlılıq nəzarət üçün bir silmək talebinde bir cismin istifadə edilməsinin səbəblərindən biri.

Mesajın 1-ci versiyasını oxuyursunuz.

 GET /some-resource/1 200 OK { id:1, status:"unimportant", version:1 } 

Həmkarınız qeydin 1-ci versiyasını oxuyur.

 GET /some-resource/1 200 OK { id:1, status:"unimportant", version:1 } 

Həmkarınız rekordunu dəyişir və versiyanı 2-ə yeniləyən verilənlər bazasını yeniləyir:

 PUT /some-resource/1 { id:1, status:"important", version:1 } 200 OK { id:1, status:"important", version:2 } 

Bir giriş silməyə çalışırsınız:

 DELETE /some-resource/1 { id:1, version:1 } 409 Conflict 

Optimist blokirovka ilə istisna etməlisiniz. Girişi yenidən oxumaq, vacib olduğunu və silinməməsinə bax.

Bunun bir başqa səbəbi bir anda bir neçə qeydləri silməkdir (məsələn, sıra seçim bayraqları olan bir grid).

 DELETE /messages [{id:1, version:2}, {id:99, version:3}] 204 No Content 

Hər bir mesajın öz versiyasına sahib olduğunu unutmayın. Bəlkə də bir neçə başlığı istifadə edərək birdən çox versiyanı göstərə bilərsiniz, lakin George, bu daha asan və çox rahatdır.

Bu Tomcat (7.0.52) və Spring MVC (4.05), ehtimal ki, əvvəlki versiyalarında işləyir:

 @RestController public class TestController { @RequestMapping(value="/echo-delete", method = RequestMethod.DELETE) SomeBean echoDelete(@RequestBody SomeBean someBean) { return someBean; } } 
41
09 авг. Neil McGuigan tərəfindən 09 Avqust 09-da verilən cavab 2013-08-09 09:24 '13 saat 09:24 'da 2013-08-09 09:24

Mənə elə gəlir ki, RFC 2616 bunu göstərir.

Bölmə 4.3-dən:

İstədiyiniz mesaj orqanının olması, İstək mesajı başlıqlarına İçerik-Uzunluq və ya Transfer-Kodlaşdırma başlığı alanının daxil edilməsini göstərir. Sorğu metodunun dəqiqləşdirilməsi (Bölmə 5.1.1) obyektin orqanına istəklərə göndərilməsinə imkan vermirsə, mesaj orqanı tələbə daxil edilməməlidir. Server hər hansı bir istək üzrə mesaj orqanını oxumalı və göndərməlidir; sorğu metodu bədən obyekti üçün xüsusi semantikləri əhatə etmirsə, sorğu işləyərkən mesaj orqanını görməməlidir.

Bölmə 9.7:

DELETE metodu, qaynaq serverinin İstek-URI ilə müəyyən edilmiş resursu silməsini tələb edir. Bu metod mənbə serverda müdaxilələr (və ya digər vasitələr) ilə ləğv edilə bilər. Məqalə kodu qaynaq serverindən dönsə belə, əməliyyat müvəffəqiyyətlə tamamlandığını göstərir. Bununla yanaşı, server müvəffəqiyyəti göstərməməlidir, cavab vermədiyi vaxt resursu silmək və ya qeyri-mümkün bir yerə silmək istəmədikdə və s.

Müvəffəqiyyətli cavab, cavab 202 (qəbul edilmiş), əgər hərəkət hələ icra edilməmişsə və ya hərəkət qəbul edildikdə, lakin cavab müəssisəyə daxil deyilsə, 204 (məzmun yoxdur) təsvir olunduğu halda, 200 (OK) olmalıdır.

İstek önbellekten geçirilir ve İstek-URI bir və ya daha çox hazırda hazırda önbelleğe alınmış obyektləri müəyyən edirsə, bu qeydlər köhnəlmiş hesab edilməlidir. Bu üsula cavablar cacheable.c deyil

Beləliklə, açıq şəkildə icazə verilmir və ya rədd edilir və yolda proxy server mesajın cismini silə biləcək bir imkan var (baxmayaraq oxumaq və göndərmək lazımdır).

27
18 нояб. Cavab 18 noyabrda Adam Rosenfield tərəfindən verilir. 2008-11-18 21:37 '08 saat 09:37 'da 2008-11-18 21:37

Yalnız bir baş, əgər DELETE müraciətinizə bir cisim göndərsəniz və Google üçün HTTPS yük balansatorundan istifadə etsəniz, sorğunuzu 400 səhvlə rədd edəcəkdir. Başımı duvara endirdim və Google bir səbəblə DELETE tələbinin bədən təhrif edilmiş bir tələbdir.

11
26 мая '16 в 2:46 2016-05-26 02:46 cavab 26 may 16-da 2:46 2016-05-26 02:46 tarixində Ben Fried tərəfindən verilir

ElasticSearch bu istifadə edir: https://www.elastic.co/guide/en/elasticsearch/reference/5.x/search-request-scroll.html#_clear_scroll_api

Netty onu dəstəkləyir.

Şərhlərdə qeyd edildiyi kimi bu vəziyyət ola bilməz.

7
27 мая '13 в 17:59 2013-05-27 17:59 Sebastien Lorber 27 may '13 'də saat 17:59' də cavab verdi 2013-05-27 17:59

Bu müəyyən deyil .

DELETE tələb mesajında ​​payload xüsusi bir semantikə malik deyil; bir DELETE sorğusu üçün bir payload orqanı göndərilməsi bəzi mövcud tətbiqlərin istəkləri rədd etməsinə səbəb ola bilər.
https://tools.ietf.org/html/rfc7231#page-29

6
09 янв. Simon Jin tərəfindən verilmiş cavab 09 Yanvar 2017-01-09 10:43 '17 də 10:43 'də 2017-01-09 10:43

Biri problemlərin bu testi ilə işləyirsə, Xeyr, hər yerdə dəstəklənmir.

Hal-hazırda Sahi Pro'yu sınamaqdır və http DELETE istənilən verilmiş məlumatın şeridlərini tetikler (son nöqtənin dizaynına əsasən toplu olaraq silinən identifikatorların böyük siyahısı).

Mən artıq bir neçə dəfə əlaqə qurdum və onları görmək üçün üç ayrı ssenarilər, şəkillər, jurnallar göndərdilər və hələ də bunu təsdiq etmirdilər. Daha sonra dəstəklədikdən sonra bir səhv ilə səhv və qaçırılan konferensiya zəngləri və mən hələ də möhkəm cavab almadım.

Əminəm ki, sahi bunu dəstəkləmir və mən bir çox digər vasitələrin paketi izlədiyini düşünürəm.

3
21 авг. cavab verən parker 21 avqust. 2015-08-21 23:29 '15 at 11:29 pm 2015-08-21 23:29

Bahar MVC-də, REST istifadə edərək bir resurs silməkdə, biz statusu qaytarırıq:

 @ResponseStatus(HttpStatus.NO_CONTENT) 
-1
06 дек. Cavab Faraz Durrani 06 dekabrda verilir. 2017-12-06 00:31 '17 'də 0:31 2017-12-06 00:31' də

növü istifadə etməyə çalışdığınız zaman - bir sorunun "JSON sorğusu" olub-olmadığını müəyyən etmək üçün, delete request bod obyekti içermiyorsa, bu yanlış qaytarılır.

-2
06 дек. Cavab xlaoyu.Lee 06 dek verilir . 2017-12-06 00:31 '17 'də 0:31 2017-12-06 00:31' də