【问题标题】:What does it mean http request body?http请求正文是什么意思?
【发布时间】:2014-03-28 20:29:02
【问题描述】:

在阅读有关 POST 和 get 方法 here 的内容时,会出现类似“当使用 post 方法时,它使用 HTTP 请求正文”之类的声明。“HTTP 请求正文”是什么意思?

【问题讨论】:

    标签: html http xmlhttprequest httprequest


    【解决方案1】:

    HTTP 正文数据是在 HTTP 事务消息中传输的数据字节,如果有任何标头,则紧跟在标头之后(在 HTTP/0.9 的情况下,不传输标头)。

    大多数 HTTP 请求是没有正文的 GET 请求。但是,使用主体模拟请求对于正确强调代理代码和测试处理此类请求的各种挂钩非常重要。大多数带有正文的 HTTP 请求使用 POST 或 PUT 请求方法。

    消息正文

    消息正文部分对于 HTTP 消息是可选的,但如果它可用,则它用于携带与请求或响应关联的实体正文。如果实体主体是关联的,那么通常 Content-Type 和 Content-Length 标题行指定关联主体的性质。

    消息体是承载实际HTTP请求数据(包括表单数据和上传等)和来自服务器的HTTP响应数据(包括文件、图像等)的消息体。以下是消息体的简单内容:

    <html>
    <body>
    <h1>Hello, World!</h1>
    </body>
    </html>
    

    有关 HTTP 消息和正文的更多详细信息,请参阅w3org link

    【讨论】:

    • Mazzu,目前的规格是greenbytes.de/tech/webdav/…
    • 谢谢朱利安,我会通过它。 :)
    • 那么当通过 PUT POST 处理 ajax 和/或 web 服务时,消息正文是否等于正文有效负载?
    【解决方案2】:

    以下html&lt;form&gt;

    <form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
      <label>Name: <input name="myTextField" value="Test"></label>
      <label><input type="checkbox" name="myCheckBox"> Check</label>
      <label>Upload file: <input type="file" name="myFile" value="test.txt"></label>
      <button>Send the file</button>
    </form>
    

    将发送这个HTTP请求(这是HTTP message的一种):

    POST / HTTP/1.1
    Host: localhost:8000
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
    Content-Length: 465
    
    -----------------------------8721656041911415653955004498
    Content-Disposition: form-data; name="myTextField"
    
    Test
    -----------------------------8721656041911415653955004498
    Content-Disposition: form-data; name="myCheckBox"
    
    on
    -----------------------------8721656041911415653955004498
    Content-Disposition: form-data; name="myFile"; filename="test.txt"
    Content-Type: text/plain
    
    Simple file.
    -----------------------------8721656041911415653955004498--
    

    POST / HTTP/1.1Content-Length: 465 行是 HTTP 标头,而其余的(在空行之后)对应于 HTTP 消息正文(也称为作为内容)。

    那么如何在后端/服务器端访问这些数据?
    不同的服务器语言(例如 Go-lang、Node.js、PHP...等)有不同的方法来解析来自 <em>http post request</em><em>http body</em>。在 Node.js 中,通常使用 body-parser,这是一个解析中间件函数(参见下面的示例)。

    // Node.js
    // OBSERVE: YOU NEED THE BODY-PARSER MIDDLEWARE IN ORDER TO DO THIS!
    ⋮
    var data1 = req.body.myTextField;
    var data2 = req.body.myCheckBox;
    var data3 = req.body.myFile;
    ⋮
    

    有关机构的更多信息:

    Bodies can be broadly divided into two categories:

    1. 单一资源主体,由一个文件组成,由两个标头定义:Content-TypeContent-Length
    2. Multiple-resource bodies,由多部分正文组成,每个正文包含不同的信息位。这通常与HTML Forms 相关联。

    来源:

    【讨论】:

      【解决方案3】:

      一个常见的用例是一个需要 JSON 格式数据的 API。下面是取自 Postman 的示例代码 sn-p,其中 API 是 Azure Function,请求正文是 JSON:

      POST /api/ValidateTwitterFollowerCount HTTP/1.1
      Host: myazurefunction.azurewebsites.net
      Content-Type: application/json
      cache-control: no-cache
      Postman-Token: XXXXXXX-XXXXX-XXXXXX
      
      {
          "followersCount" : 220,
          "tweettext":"#Stack Overflow rocks",
          "Name": "John Doe"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 2013-06-27
        • 2019-01-19
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        相关资源
        最近更新 更多