首页 文章

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

提问于
浏览
187

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

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

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

2 回答

  • 215

    请求有效负载 - 或者更确切地说:payload body of a HTTP Request - 是通常由POST or PUT Request发送的数据 . 它是 Headers 之后的部分和HTTP RequestCRLF .

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

    POST /some-path HTTP/1.1
    Content-Type: application/json
    
    { "foo" : "bar", "name" : "John" }
    

    如果您按照AJAX提交此内容,浏览器只会向您显示它作为有效负载正文提交的内容 . 这就是它所能做的一切,因为它不知道数据来自何处 .

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

    POST /some-path HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    foo=bar&name=John
    

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

    因此,它们在 Content-Type 中不同,但在数据提交方式上不同 . 在这两种情况下,数据都在消息体中 . Chrome会在开发人员工具中区分数据的呈现方式 .

  • 10

    在Chrome中,请求'Content-Type:application/json'显示为Request PayedLoad并将数据作为json对象发送 .

    但'Content-Type:application/x-www-form-urlencoded'请求显示表单数据并将数据发送为 Key:Value Pair ,因此如果您在一个键 it flats 中有对象数组,那么该键的值为:

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

    发送

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

相关问题