Chrome开发人员工具“网络”标签中显示的“请求有效负载”与“表单数据”之间有什么区别


244

我有一个我必须支持的旧Web应用程序(我没有写过)。

当我填写表单并提交后,然后在Chrome中检查“网络”标签,我会看到“请求有效载荷”,通常我会在其中看到“表单数据”。两者之间有什么区别?何时发送而不是发送?

用谷歌搜索,但是并没有真正找到任何解释此信息的信息(只是人们试图让javascript应用程序发送“表单数据”而不是“请求有效载荷”。




2
仍然不了解两者之间的区别。“请求有效负载”是否只是未使用类型编码的请求?
red888 2014年

Answers:


274

请求有效负载-或更准确地说:HTTP请求的有效负载主体 -通常是POST或PUT请求发送的数据。它CRLFHTTP Request的标头和之后的部分。

与的请求Content-Type: application/json可能如下所示:

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

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

如果您按照AJAX提交此内容,则浏览器仅向您显示它作为有效内容正文提交的内容。这就是它能做的所有事情,因为它不知道数据来自何处。

如果您提交的HTML表单带有 method="POST"Content-Type: application/x-www-form-urlencoded或者Content-Type: multipart/form-data您的请求可能如下所示:

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

foo=bar&name=John

在这种情况下,表单数据是请求有效负载。浏览器在这里了解更多:它知道bar是所提交表单的输入字段foo的值。这就是它向您展示的。

因此,它们的区别Content-Type在于提交数据的方式不同。在两种情况下,数据都在消息正文中。Chrome可以区分在开发人员工具中如何将数据呈现给您。


3
在大小等方面,是否有理由优先选择另一个。特别是对于轻量级的AJAX调用?
用户

@buffer抱歉,我不明白您的问题。
lefloh 2014年

3
如果我要发送AJAX呼叫,则可以将content-type设置为jsonx-www-form-urlencoded。前者将数据作为请求有效负载发送,而后者将其编码为url查询。两者似乎都工作正常。有理由偏爱其中之一吗?我看到大多数网站(例如Twitter,Google,Facebook,Stackoverflow)将内容类型设置为x-www-form-urlencoded。有什么具体原因吗?
用户

2
这与OP并没有真正的关系,但也许这个答案会有所帮助
lefloh 2014年

13

在Chrome浏览器中,带有“ Content-Type:application / json”的请求显示为Request PayedLoad,并以json对象发送数据。

但是带有'Content-Type:application / x-www-form-urlencoded'的请求 显示Form Data并以Key:Value Pair的形式发送数据,因此,如果您在一个键中包含对象数组,则它将该键的值展平:

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

发送

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}

PHP当然是邪恶的。application / x-www-form-urlencoded的流行是由PHP的流行定义的。
Brian Haak

4
之所以投票,是因为没有“ json对象”之类的东西。发送的json数据以纯字符串形式发送,因为json本质上是一个字符串。您当然可以使用json_encode将其转换为标准的“对象”,但这也不能使其成为“ json对象”。
Volkan Ulukut

好吧,我认为javascript json模板对象或仅javascript对象更好
Mohammadreza

1
只是“ json”或如果您想强调类型“ json字符串”就可以了。
Volkan Ulukut
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.