Forms 什么';这两者之间的区别是什么;请求有效载荷“;vs";表格数据“;如Chrome开发工具网络选项卡所示

Forms 什么';这两者之间的区别是什么;请求有效载荷“;vs";表格数据“;如Chrome开发工具网络选项卡所示,forms,http,rest,post,google-chrome-devtools,Forms,Http,Rest,Post,Google Chrome Devtools,我必须支持一个旧的web应用程序(我没有编写) 当我填写表格并提交,然后检查Chrome中的“网络”选项卡时,我会看到“请求有效负载”,通常我会看到“表格数据”。两者之间有什么区别?何时发送一个而不是另一个 谷歌搜索了这一点,但没有找到任何解释这一点的信息(只是人们试图让javascript应用程序发送“表单数据”而不是“请求负载”。请求负载-或者更准确地说: -数据通常是由一台计算机发送的。 它是一个文件的标题和CRLF之后的部分 内容类型为application/json的请求可能如下所示:

我必须支持一个旧的web应用程序(我没有编写)

当我填写表格并提交,然后检查Chrome中的“网络”选项卡时,我会看到“请求有效负载”,通常我会看到“表格数据”。两者之间有什么区别?何时发送一个而不是另一个


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

请求负载-或者更准确地说: -数据通常是由一台计算机发送的。 它是一个文件的标题和
CRLF
之后的部分

内容类型为application/json的请求可能如下所示:

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

{ "foo" : "bar", "name" : "John" }
POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John
如果您通过AJAX提交,浏览器只会显示它作为有效负载主体提交的内容。这就是它所能做的,因为它不知道数据来自哪里

如果您提交的HTML表单包含
method=“POST”
内容类型:application/x-www-Form-urlencoded
内容类型:多部分/表单数据
您的请求可能如下所示:

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

{ "foo" : "bar", "name" : "John" }
POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John
在本例中,表单数据是请求负载。在这里,浏览器知道更多:它知道bar是提交表单的输入字段foo的值。这就是它向您显示的内容

因此,它们在
内容类型上不同,但在提交数据的方式上不同。在这两种情况下,数据都在消息体中。Chrome区分数据在开发人员工具中的显示方式。

在Chrome中,带有“Content Type:application/json”的请求显示为请求付费加载,并以json对象的形式发送数据

但是带有“Content-Type:application/x-www-form-urlencoded”的请求显示表单数据,并以键:值对的形式发送数据,因此,如果一个键中有对象数组,则它会平放该键的值:

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

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}
勒弗洛博士(优秀)的回答:

  • 如果HTTP请求具有消息体,则它是“请求有效负载”
  • “表单数据”是请求有效负载的一个子集,其中正文编码为
    key1=value1&key2=value2
  • 每当Google Chrome能够区分表单数据和一般请求负载时,它就会定制格式

的可能副本的可能副本仍然没有得到两者之间的区别。是“请求有效负载”只是一个没有使用类型编码的请求?可能的重复项是否有理由在大小等方面选择一个而不是另一个。特别是对于轻量级AJAX调用?@buffer抱歉,我不理解你的问题。如果我发送AJAX调用,我可以将内容类型设置为
json
x-www-form-urlcoded
前者将数据作为请求负载发送,而后者将其编码为url查询。两者似乎都很好。有理由选择其中一种吗?我看到大多数网站,如Twitter、Google、Facebook、Stackoverflow,将内容类型设置为
x-www-form-urlencoded
。有任何具体原因吗?这与OP无关,但可能。PHP是ev当然可以。application/x-www-form-urlencoded的流行度是由PHP.downvoted的流行度定义的,因为没有“json对象”。发送的json数据是作为普通字符串发送的,因为json本质上是一个字符串。当然,您可以使用json_encode将其转换为标准的“对象”,但这并不意味着它是一个简单的字符串也可以是“json对象”。好的,我认为javascript json模板对象或只是javascript对象更好。只要是“json”或者如果你想强调类型“json字符串”就可以了。当它被解析时,它被称为“对象文字”。当它被“字符串化”(转换为字符串)时,它被称为json(javascript对象符号)但是JavaScript对象的正确名称是“对象文字”