HTTP 协议中的 FORM 参数可以通过两种方式发送:通过 URL 的查询字符串(即 Path 和问号后面的键值对),或者放在请求的 Body 里面。
-
URL 查询字符串:当使用 GET 请求时,FORM 参数通常以键值对的形式附加在 URL 的查询字符串中。例如,
http://example.com/page?param1=value1¶m2=value2
。在这种情况下,参数通过 URL 传输。 -
请求体(Body)中:当使用 POST 或其他 HTTP 方法时,FORM 参数通常放在请求的 Body 中。这种情况下,数据不会出现在 URL 中,而是作为请求的一部分发送。在这种情况下,内容类型(Content-Type)通常是
application/x-www-form-urlencoded
或multipart/form-data
,用于指定如何解析 Body 中的数据。
选择哪种方式取决于你的需求和使用的 HTTP 方法。通常,对于包含敏感信息或大量数据的 FORM 提交,推荐使用 POST 方法并将数据放在 Body 中,以避免数据通过 URL 暴露。
FORM 参数 Body格式
当我们将 FORM 参数放在 HTTP 请求的 Body 中时,通常采用两种格式:application/x-www-form-urlencoded
或 multipart/form-data
。下面是这两种格式的示例:
-
application/x-www-form-urlencoded
格式:- 这是最常见的 POST 请求格式,用于简单的 FORM 数据提交。
- 数据以键值对的形式编码,类似于 URL 查询字符串。
- 示例:
param1=value1¶m2=value2
- 在这个示例中,
param1
和param2
是参数名,value1
和value2
是与这些参数相关联的值。
-
multipart/form-data
格式:- 通常用于文件上传和发送大量数据。
- 数据被分为多个部分(每个参数一个部分),每部分都有自己的内容类型和数据。
- 示例:
--boundary12345 Content-Disposition: form-data; name="param1" value1 --boundary12345 Content-Disposition: form-data; name="param2" value2 --boundary12345--
- 在这个示例中,
boundary12345
是分隔符,用于区分各个部分。每个部分都包含一个Content-Disposition
头,指定参数的名称,然后是参数的值。
在使用这些格式时,我们需要在 HTTP 请求头中指定 Content-Type
。例如,对于 application/x-www-form-urlencoded
格式,我们需要在请求头中添加 Content-Type: application/x-www-form-urlencoded
。对于 multipart/form-data
格式,需要添加类似 Content-Type: multipart/form-data; boundary=boundary12345
的请求头。这告诉服务器如何解析 Body 中的数据。