Qual é a diferença entre "Solicitar carga útil" e "Formulário de dados", como visto na guia Rede do Chrome Dev Tools

244

Eu tenho um aplicativo Web antigo que tenho que suportar (o qual não escrevi).

Ao preencher um formulário e enviar, em seguida, verifique a guia "Rede" no Chrome e vejo "Solicitar carga útil", onde normalmente veria "Dados do formulário". Qual é a diferença entre os dois e quando um seria enviado em vez do outro?

Pesquisei isso no Google, mas realmente não encontrei nenhuma informação que explica isso (apenas pessoas tentando obter aplicativos javascript para enviar "Dados do formulário" em vez de "Solicitar carga útil".

red888
fonte
Possível duplicata do stackoverflow.com/questions/10494574
lefloh 16/04
2
Ainda não entendi qual é a diferença entre os dois. "Solicitar carga útil" é apenas uma solicitação que não foi codificada com um tipo?
precisa saber é o seguinte

Respostas:

274

A carga útil da solicitação - ou, para ser mais preciso: o corpo da carga útil de uma solicitação HTTP - são os dados normalmente enviados por uma solicitação POST ou PUT . É a parte após os cabeçalhos e o CRLFde uma solicitação HTTP .

Uma solicitação com Content-Type: application/jsonpode ser assim:

POST /some-path HTTP/1.1
Content-Type: application/json

{ "foo" : "bar", "name" : "John" }

Se você enviar isso por AJAX, o navegador simplesmente mostra o que está sendo enviado como corpo de carga. É tudo o que pode fazer, porque não tem ideia de onde os dados vêm.

Se você enviar um formulário HTML com method="POST"e Content-Type: application/x-www-form-urlencodedou Content-Type: multipart/form-datasua solicitação for semelhante a esta:

POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John

Nesse caso, os dados do formulário são a carga útil da solicitação. Aqui, o Navegador sabe mais: sabe que bar é o valor do campo de entrada do formulário enviado. E é isso que está mostrando a você.

Portanto, eles diferem na Content-Typeforma como os dados são enviados. Nos dois casos, os dados estão no corpo da mensagem. E o Chrome distingue como os dados são apresentados a você nas Ferramentas do desenvolvedor.

lefloh
fonte
3
Existe um motivo para preferir um ao outro em termos de tamanho, etc. Especificamente para chamadas AJAX leves?
user
@ bufer desculpe, eu não entendo sua pergunta.
Lefloh
3
Se estou enviando uma chamada AJAX, posso definir o tipo de conteúdo como jsonou x-www-form-urlencoded. O primeiro envia os dados como carga útil da solicitação, enquanto o último os codifica como consulta de URL. Ambos parecem funcionar bem. Existe um motivo para preferir um deles? Eu vejo a maioria dos sites como Twitter, Google, Facebook, Stackoverflow e defina o tipo de conteúdo x-www-form-urlencoded. Algum motivo específico?
User
2
Isso não está realmente relacionado ao OP, mas talvez essa resposta ajude .
Lefloh
13

No Chrome, a solicitação com 'Content-Type: application / json' é exibida como Request PayedLoad e envia dados como objeto json.

Mas a solicitação com 'Content-Type: application / x-www-form-urlencoded' mostra Dados do formulário e envia os dados como Chave: par de valores , portanto, se você tiver uma matriz de objeto em uma chave, ela altera o valor dessa chave:

{ Id: 1, 
name:'john', 
phones:[{title:'home',number:111111,...},
        {title:'office',number:22222,...}]
}

envia

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}
Mohammadreza
fonte
PHP é mau, é claro. A popularidade de application / x-www-form-urlencoded é definida pela popularidade do PHP.
Brian Haak
4
recusado porque não existe um "objeto json". os dados json enviados são enviados como uma sequência simples, porque json é essencialmente uma sequência. é claro que você pode convertê-lo em um "objeto" padrão com json_encode, mas isso também não o torna um "objeto json".
Volkan Ulukut
Ok, acho que o objeto javascript json template ou apenas o objeto javascript é melhor #
Mohammadreza
1
Apenas "json" ou se você quiser enfatizar o tipo "json string", tudo bem.
Volkan Ulukut