Tengo problemas para encontrar una especificación definitiva de esto en el estándar. Tengo un cliente HTTP que no incluye un encabezado 'Content-Length: 0' al hacer una solicitud PUT donde no especifico un cuerpo, y un servidor que se confunde con tales solicitudes, y me pregunto qué programa debería culpar¿Se requiere una solicitud HTTP PUT para incluir un cuerpo?
Respuesta
Las solicitudes HTTP tienen un cuerpo si tienen un encabezado Content-Length o Transfer-Encoding (RFC 2616 4.3). Si la solicitud no tiene ninguno, no tiene cuerpo y su servidor debería tratarlo como tal.
Dicho esto, es inusual que una solicitud PUT no tenga cuerpo, por lo que si estuviera diseñando un cliente que realmente quisiera enviar un cuerpo vacío, pasaría Content-Length: 0. De hecho, dependiendo de la propia al leer las definiciones de los métodos POST y PUT (RFC 2616 9.5, 9.6) se podría argumentar que se requiere que el cuerpo sea requerido, pero una forma razonable de no manejar ningún cuerpo sería asumir un cuerpo de longitud cero.
El campo de longitud de contenido se requiere de acuerdo con la siguiente sección de la especificación HTTP/1.1 estándar http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
Lo que se está poniendo (en el sentido verbo) en el servidor si no hay contenido? El spec se refiere al contenido como "la entidad adjunta", pero una solicitud sin contenido no tendría entidad incluida y, por lo tanto, nada para poner en el servidor.
A menos que, por supuesto, no quisiera PONER nada en el servidor, en cuyo caso probablemente prefiera un BORRAR.
no responder a la pregunta, pero la afirmación de cómo jaxrs me permite el uso frecuente de PUT sin cuerpo:
Ejemplo de poner bodyless: Dale usuario un permiso adicional.
PUT/admin/usuarios/{nombre de usuario}/permiso/autorización} {
exactamente mi ¡problema! Llegué a la misma conclusión. Pero hablando estrictamente, esto va en contra de RFC, donde, aunque no se menciona explícitamente, se hace referencia al cuerpo como existente. Podría causar problemas, pero en mi experiencia, todos los servidores/frameworks web modernos funcionarían. –
Un cuerpo no es requerido por el estándar IETF, aunque el contenido de longitud debe ser 0 si no hay cuerpo. Usa el método apropiado para lo que estás haciendo. Si se va a poner en código, dado
int x;
int f(){ return x; }
y una variable llamada remota r
.
Un post es equivalente a
r=f();
Una opción de venta es equivalente a
r=x;
y una get es equivalente a
x=r;
Este es el ejemplo más claro de PUT vs POST que he leído, aunque fuera del tema –
- 1. HTTP PUT Solicitud con Node.js
- 2. ¿Cómo hacer una solicitud HTTP PUT?
- 3. ¿Cómo se suele emitir una solicitud HTTP PUT?
- 4. PHP obtener el cuerpo de la solicitud PUT
- 5. Chrome está almacenando en caché una solicitud HTTP PUT
- 6. ¿Cómo hacer una solicitud HTTP PUT utilizando LWP?
- 7. para una solicitud HTTP
- 8. PHP cURL HTTP PUT
- 9. ¿Se puede hacer una solicitud HTTP PATCH desde Javascript?
- 10. Traducir PHP PUT Solicitud de HTTP a ColdFusion
- 11. HTTP POST vs HTTP PUT
- 12. obtener una solicitud PUT con CodeIgniter
- 13. ¿Cómo enviar PUT, ELIMINAR solicitud HTTP en HttpURLConnection?
- 14. Java: HTTP PUT con HttpURLConnection
- 15. Accediendo al cuerpo sin procesar de una solicitud PUT o POST
- 16. solicitud POST y PUT AFNetworking
- 17. PUT solicitud de Ajax
- 18. Sinatra y HTTP PUT
- 19. ¿Cómo enviar datos en el cuerpo de solicitud HTTP cuando se utiliza un formulario HTML?
- 20. Cómo acceder al cuerpo de la solicitud HTTP con RESTEasy
- 21. Rubí - Obtener solicitud cuerpo de la llamada entrante HTTP
- 22. Interceptar cuerpo de solicitud HTTP desde la extensión de cromo
- 23. ¿Cómo puedo POST usar Java e incluir parámetros y un cuerpo de solicitud sin formato?
- 24. ¿Cómo ejecuto un HTTP PUT en bash?
- 25. PUT HTTP para cargar un archivo en Java
- 26. ¿Qué codificación debo usar para un HTTP PUT?
- 27. Modificar encabezados HTTP para una solicitud JSONP
- 28. SpringMVC no reconoce los parámetros del cuerpo de solicitud si usa PUT
- 29. HTTP Response 412: ¿puede incluir contenido?
- 30. ¿Se requiere HttpWebRequest.GetResponse para completar un POST?
Eso es un debe no es una obligación – bdonlan