Estou tendo problemas para encontrar uma especificação definitiva disso no padrão. Tenho um cliente HTTP que não inclui um Content-Length: 0
cabeçalho ao fazer uma solicitação PUT em que não especifico um corpo e um servidor que fica confuso com essas solicitações, e estou me perguntando de qual programa devo culpar.
93
Respostas:
As solicitações HTTP têm um corpo se tiverem um cabeçalho Content-Length ou Transfer-Encoding ( RFC 2616 4.3 ). Se a solicitação não tiver nenhum dos dois, não terá corpo e seu servidor deverá tratá-lo como tal.
Dito isso, é incomum que uma solicitação PUT não tenha corpo e, portanto, se eu estivesse projetando um cliente que realmente quisesse enviar um corpo vazio, aprovaria Content-Length: 0. De fato, dependendo da leitura do POST. e definições do método PUT ( RFC 2616 9.5, 9.6 ) pode-se argumentar que o corpo está implícito como sendo necessário - mas uma maneira razoável de não manipular nenhum corpo seria assumir um corpo de comprimento zero.
fonte
PUT
solicitação é basicamente para criar ou atualizar um arquivo no servidor. E não há nada de ilegítimo em um arquivo estar vazio, não é?disable
eenable
são verbos. Eu provavelmente preferiria usarPATCH
no/users/{id}
ponto de extremidade nesse caso.Não respondendo à pergunta, mas afirmando como jaxrs me permite o uso frequente de PUTs sem corpo:
Exemplo de colocação sem corpo: Dê ao usuário uma permissão adicional.
PUT / admin / users / {username} / permission / {permission}
fonte
Um corpo não é exigido pelo padrão IETF, embora o comprimento do conteúdo deva ser 0 se não houver corpo. Use o método apropriado para o que você está fazendo. Se você fosse colocá-lo em código, dado
e uma variável remota chamada
r
.Uma postagem é equivalente a
Uma opção de venda é equivalente a
e get é equivalente a
fonte
int f(int* resource, int body);
e então o POST chamariaf(&r, x);
- o que pode fazer ou nãor
o que o servidor achar apropriado. Mas também pode retornar coisas, então ... talvez mais comoy = f(&r, x);
.O que está sendo PUT (no sentido verbal) no servidor se não houver conteúdo? A especificação se refere ao conteúdo como "a entidade fechada", mas uma solicitação sem conteúdo não teria nenhuma entidade fechada e, portanto, nada para colocar no servidor.
A menos, é claro, que você não quisesse COLOCAR nada no servidor; nesse caso, você provavelmente desejaria EXCLUIR.
fonte
Content-Length: 0
ou{ }
em JSON como o corpo?O campo de comprimento do conteúdo é obrigatório de acordo com a seção a seguir no padrão HTTP / 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
fonte