HTTP请求中 request payload 和 formData 区别?

博客介绍了FormData和Payload是浏览器传输给接口的两种格式,浏览器通过Content-Type区分。若为application/x-www-form-urlencoded则是formdata方式,application/json或multipart/form-data则是request payload方式,还举例说明了不同编码方式下的使用情况。

转载自:https://www.cnblogs.com/tugenhua0707/p/8975615.html

FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的(了解Content-Type),如果是 application/x-www-form-urlencoded的话,则为formdata方式,如果是application/json或multipart/form-data的话,则为 request payload
的方式
比如如下使用ajax方式的提交post请求的代码(默认使用application/x-www-form-urlencoded编码):

复制代码

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
  <script type="text/javascript" src="https://tugenhua0707.github.io/html5UploadImage/js/jquery.js"></script>
</head>
<body>
  <div id="app">
    <div class="btn">发送post请求</div>
  </div>
  <script>
    var obj = {
      "name": 'CntChen',
      "info": 'Front-End',
    };
    $('.btn').click(function() {
      $.ajax({
        url: 'www.example.com',
        type: 'POST',
        dataType: 'json',
        data: obj,
        success: function(d) {
          
        }
      })
    });
  </script>
</body>
</html>

复制代码

如下图所示:

2. 使用 multipart/form-data表单上传文件

如下html代码:

复制代码

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
</head>
<body>
  <div id="app">
    <form action="http://www.example.com" method="POST" enctype="multipart/form-data">
      <p>username: <input type="text" name="fname" /></p>
      <p>age: <input type="text" name="age" /></p>
      <input type="submit" value="提交" />
    </form>
  </div>
</body>
</html>

复制代码

如下图所示:

 

可以看到 使用multipart/form-data表单上传文件时使用的是 Request Payload 格式;

3. 使用 Content-Type: application/json 来编码

如下html代码:

复制代码

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
  <script type="text/javascript" src="https://tugenhua0707.github.io/html5UploadImage/js/jquery.js"></script>
</head>
<body>
  <div id="app">
    <div class="btn">发送post请求</div>
  </div>

  <script>
    $('.btn').click(function() {
      $.ajax({
        url: 'http://localhost:8081/api.json',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify({a: [{b:1, a:1}]}),
        success: function(d) {
          
        }
      })
    });
  </script>
</body>
</html>

复制代码

如下图所示

<think> 首先,用户的问题是想了解"request payload"的含义,包括它的定义解释。系统指令要求我使用中文回答,并确保结构清晰,帮助用户逐步解决问题。 从提供的引用中,我可以提取关于request payload的关键信息: - 引用[1]:当发起一次POST请求时,若content-type为application/json,则参数会以Request Payload的形式进行传递,数据格式为JSON。 - 引用[2]:当设置Content-Type:application/json时,参数显示在Request Payload中,格式为JSON。 - 引用[3]:formDatarequest Payload常出现于POST请求中,request Payload用于JSON数据。 - 引用[4]:当Content-type是application/json、text/plain等时,请求方式为Request Payload;而application/x-www-form-urlencoded时是FormData。 - 引用[5]:提到了PHP接收Request payload的参数,但没有具体解释。 基于这些,我应该定义request payload:它是HTTP请求中承载数据的部分,特别是在POST请求中,当Content-Type设置为非表单类型(如application/json)时,数据以JSON格式或其他格式放在请求体中,而不是作为表单数据。 关键点: - **定义**:Request PayloadHTTP请求的主体部分,用于传输数据,通常在POST或PUT请求中使用。 - **与FormData区别**:FormData用于application/x-www-form-urlencoded或multipart/form-data,数据编码为键值对;而Request Payload用于其他类型如application/json,数据格式更自由。 - **常见场景**:在API请求中,当发送JSON数据时使用。 - **解释**:它不显示在URL中,而是隐藏在请求体中,提高安全性可读性。 回答结构: 1. **定义**:清晰阐述什么是request payload。 2. **解释**:详细说明它的工作原理、常见格式用途。 3. **对比**:与FormData对比,突出区别。 4. **示例**:添加一个简单的代码示例或场景示例来巩固理解。 5. **总结**:简要重申重点。 系统指令还要求: - 行内数学表达式用$...$,但这里可能不涉及数学,除非有公式。 - 独立公式用$$...$$,但同样不相关。 - LaTeX语法正确:确保任何公式正确。 - 中文回答:全程用中文。 - 生成相关问题:在结尾添加相关问题。 - 引用标识:在回答中引用段落末尾添加[^n],但我需要从引用中提取信息。 - 回答真实可靠:基于提供的引用。 引用使用: - 引用[1]:解释JSON格式的payload。 - 引用[2]:支持JSON格式。 - 引用[3][4]:对比FormData。 - 引用[5]:提到接收,但不太相关;我会谨慎使用。 最终回答结构: - 开头直接回答定义。 - 分步骤解释。 - 添加一个简单示例(如伪代码或描述)。 - 引用标识:在解释时添加。 - 结尾生成相关问题。 生成相关问题: - 基于主题,例如: 1. request payload在哪些编程语言中如何接收? 2. request payloadquery参数的区别? 3. 如何处理request payload中的JSON数据? 4. 为什么使用request payload不是FormData? 5. request payload的安全性考虑? 确保问题相关且自然。 </think> ### Request Payload的定义解释 在HTTP通信中,**Request Payload** 是指HTTP请求体中携带的数据部分,主要用于传输结构化信息(如JSON、XML或纯文本),而非作为URL参数或表单数据出现。它常见于POST、PUT等非GET请求中,当Content-Type头设置为非表单类型(如application/json)时,数据会以Request Payload的形式传递[^1][^2]。下面我将逐步解释其核心概念。 #### 1. **定义** - **Request Payload** 是HTTP请求主体(Body)中的数据负载,它不直接显示在请求URL中,而是隐藏在请求的正文部分。例如,当客户端向服务器发送JSON格式的数据时,这些数据会被封装在Request Payload中[^1][^2]。 - 与URL参数(如`?key=value`)不同,Request Payload适用于传输较大或复杂的数据结构,提高数据的可读性安全性[^4]。 #### 2. **工作原理** - **数据格式**:Request Payload支持多种格式,最常见的是JSON(如`{"name":"Alice","age":30}`),但也包括XML、text/plain等。服务器根据Content-Type头(如`Content-Type: application/json`)来解析数据[^2][^4]。 - **传输方式**:在HTTP请求中,数据被放置在请求体(Body)部分。例如: - 如果Content-Type是`application/json`,参数以JSON对象形式传递,不会出现在URL中。 - 相比之下,FormData(Content-Type为`application/x-www-form-urlencoded`)会将数据编码为键值对(如`name=Alice&age=30`),并显示在请求体中,但以表单形式处理[^3][^4]。 - **优势**: - **安全性**:数据不暴露在URL中,减少敏感信息泄露风险。 - **灵活性**:支持复杂数据结构(如嵌套JSON),适用于API交互。 - **可读性**:JSON格式更易于人类机器解析[^1][^2]。 #### 3. **与FormData区别** - **Request Payload**: - 用于Content-Type如`application/json`、`text/plain`。 - 数据格式自由,如JSON对象。 - 示例:AJAX请求中设置`Content-Type: application/json`时,参数显示为Request Payload[^2][^4]。 - **FormData**: - 用于Content-Type如`application/x-www-form-urlencoded`或`multipart/form-data`(文件上传)。 - 数据编码为简单键值对。 - 示例:HTML表单提交时,数据FormData形式传递[^3][^4]。 简单来说,Request Payload更适合现代API数据传输,而FormData适用于传统表单提交。 #### 4. **实际示例** 考虑一个简单的API请求场景: - 客户端使用JavaScript发起POST请求,发送JSON数据: ```javascript fetch('/api/user', { method: 'POST', headers: { 'Content-Type': 'application/json' // 设置Content-Type为JSON }, body: JSON.stringify({ name: 'Bob', age: 25 }) // 数据Request Payload形式传递 }); ``` - 在这个请求中: - 请求URL为`/api/user`。 - 参数`{name: "Bob", age: 25}`不会出现在URL中,而是作为Request Payload出现在HTTP Body中。 - 服务器根据`Content-Type: application/json`解析JSON数据[^1][^2]。 #### 5. **总结** Request PayloadHTTP请求中高效、安全的数据传输机制,尤其适合JSON格式的API交互。它通过隐藏数据请求体内,提升了隐私性灵活性,是现代Web开发(如RESTful API)的常用方式[^1][^4]。如果您需要具体实现(如如何在PHP或Java中接收Request Payload),可以参考相关编程文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值