Non riesco a trovare una specifica precisa di questo nello standard. Ho un client HTTP che non include un'intestazione 'Content-Length: 0' quando faccio una richiesta PUT in cui non specifichi un corpo, e un server che viene confuso da tali richieste, e mi chiedo quale programma dovrei incolpare.È richiesta una richiesta PUT HTTP per includere un corpo?
risposta
Le richieste HTTP hanno un corpo se hanno un'intestazione Content-Length o Transfer-Encoding (RFC 2616 4.3). Se la richiesta non ha né, non ha corpo, e il tuo server dovrebbe trattarlo come tale.
Detto questo, è insolito che una richiesta PUT non abbia un corpo e quindi se stessimo progettando un client che desiderava veramente inviare un corpo vuoto, passerei Content-Length: 0. Infatti, a seconda della propria leggendo le definizioni dei metodi POST e PUT (RFC 2616 9.5, 9.6) si potrebbe sostenere che il corpo è implicito per essere richiesto - ma un modo ragionevole per gestire nessun corpo sarebbe quello di assumere un corpo a lunghezza zero.
Il campo lunghezza del contenuto è necessario secondo il seguente sezione nel HTTP/1.1 di serie http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
ciò che viene PUT (nel senso del verbo) sul server se non c'è nessun contenuto? Lo spec si riferisce al contenuto come "l'entità inclusa", ma una richiesta senza contenuto non avrebbe un'entità inclusa e quindi nulla da mettere sul server.
A meno che, ovviamente, non voleste mettere nulla sul server, nel qual caso si preferirebbe invece un DELETE.
Non rispondere alla domanda, ma affermando come jaxrs mi permette di uso frequente di PUTs senza corpo:
Esempio di put senza corpo: dare all'utente un permesso supplementare.
PUT/admin/utenti/{username}/autorizzazione/{} permesso
esattamente la mia problema! Sono arrivato alla stessa conclusione. Ma in senso stretto, questo va contro RFC, dove, anche se non menzionato esplicitamente, il corpo viene definito come esistente. Potrebbe causare problemi, ma secondo la mia esperienza, tutti i moderni server/framework web funzionerebbero. –
Un corpo non è richiesta dallo standard IETF, anche se il contenuto di lunghezza dovrebbe essere 0 se non c'è nessun corpo. Usa il metodo appropriato per quello che stai facendo. Se si dovesse mettere in codice, dato
int x;
int f(){ return x; }
e una variabile remota denominata r
.
Un post equivale a
r=f();
Un put equivale a
r=x;
e un get equivale a
x=r;
Questo è l'esempio più chiaro di PUT vs POST che abbia mai letto, anche se fuori tema –
- 1. Tornado PUT richiesta mancante corpo
- 2. Richiesta PUT HTTP con Node.js
- 3. Traduci PHP PUT richiesta HTTP a ColdFusion
- 4. Chrome sta memorizzando nella cache una richiesta HTTP PUT
- 5. HTTP Cancellare con Richiesta corpo emette
- 6. Come fare una richiesta PUT HTTP usando LWP?
- 7. AngularJS Come includere l'intestazione nella richiesta HTTP
- 8. PUT Richiesta Ajax
- 9. Richiesta Android Volley PUT
- 10. Invia corpo richiesta su $ risorsa
- 11. Elasticsearch Richiesta GET con corpo della richiesta
- 12. Backbone.js - model.save() non attiva una richiesta PUT
- 13. richiesta PUT multipart utilizzando AFNetworking
- 14. La risorsa richiesta non supporta il metodo http "PUT"
- 15. Richiesta POST HTTP vuota o richiesta GET per generare un valore casuale tramite un'API HTTP
- 16. Modifica intestazioni HTTP per una richiesta JSONP
- 17. Symfony2: invia una richiesta HTTP
- 18. Come cancellare una richiesta http
- 19. Come registrare il corpo della richiesta HTTP in Spring MVC?
- 20. Come scrivere una richiesta HTTP
- 21. Come funziona una richiesta put attraverso Angular, Express e Mongoose?
- 22. Lunghezza contenuto della richiesta HTTP> dimensione del corpo
- 23. Intercetta il corpo della richiesta HTTP dall'estensione chrome
- 24. Richiesta HTTP SOAP PHP
- 25. Come impostare il corpo della richiesta HTTP usando AFHTTPRequestOperationManager?
- 26. Come accedere al corpo della richiesta HTTP usando RestSharp?
- 27. Impedisci l'aggiornamento dalla codifica del corpo della richiesta http
- 28. C# Xml in Http messaggio di richiesta messaggio Corpo
- 29. come discarica richiesta HTTP corpo in RESTEasy & wildfly 8.2
- 30. Invia stringa nella richiesta PUT con libcurl
Questo è un caso in cui non un MUST – bdonlan