首页 > 其他分享 >Http发送Post请求 form-data 和 application/x-www-form-urlencoded 区别

Http发送Post请求 form-data 和 application/x-www-form-urlencoded 区别

时间:2024-08-01 10:50:50浏览次数:17  
标签:www Http form application urlencoded 编码方式 data

在HTTP协议中,使用POST请求时,可以通过不同的方式发送表单数据。form-data 和 application/x-www-form-urlencoded是两种常见的编码方式,它们在发送数据时有一些关键的区别:

application/x-www-form-urlencoded

  • 编码方式:以键值对的形式进行编码,每个键值对之间用&符号连接,每个键和值之间用=符号连接。
  • 格式示例key1=value1&key2=value2
  • 适用场景:适用于简单的表单数据提交,如用户登录、搜索等。
  • 优点
    • 简单易用,易于解析。
    • 数据长度没有限制。
  • 缺点
    • 不支持文件上传。
    • 对于复杂的数据结构(如嵌套表单),需要手动进行编码。

  好多技术初学者,还在认为这种方式的参数会拼接在 URL 后面,这是一种错误的理解!在使用 application/x-www-form-urlencoded 编码方式发送 HTTP POST 请求时,参数不会拼接在 URL 后面。相反,参数会被编码并包含在请求体(request body)中。

具体来说,application/x-www-form-urlencoded 编码方式会将表单数据编码为键值对的形式,每个键值对之间用 & 符号连接,每个键和值之间用 = 符号连接,然后这些数据会被放置在 HTTP 请求的正文(body)部分。

例如,如果你有以下表单数据:

key1=value1
key2=value2

在发送 POST 请求时,请求体(body)部分会包含以下内容:

key1=value1&key2=value2

而 URL 部分通常只包含请求的路径和查询参数(如果有的话),例如:

POST /path/to/resource HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

key1=value1&key2=value2

总结一下,application/x-www-form-urlencoded 的参数不会拼接在 URL 后面,而是包含在请求体中。

form-data

  • 编码方式:用于文件上传等复杂数据的提交,通常用于multipart/form-data编码类型。
  • 格式示例
    --boundary
    Content-Disposition: form-data; name="file"; filename="example.txt"
    Content-Type: text/plain
    
    文件内容
    --boundary--
    其中boundary是一个唯一的分隔符,用于区分不同的表单字段。
  • 适用场景
    • 文件上传。
    • 复杂的数据结构,如嵌套表单。
  • 优点
    • 支持文件上传。
    • 可以处理复杂的数据结构。
  • 缺点
    • 数据长度受HTTP协议限制。
    • 解析相对复杂。

总结

  • 数据结构application/x-www-form-urlencoded适合简单的键值对结构,而form-data适合复杂的数据结构,特别是包含文件上传的情况。
  • 安全性form-data通常被认为比application/x-www-form-urlencoded更安全,因为它可以更好地保护敏感数据。
  • 兼容性:大多数服务器和客户端都支持application/x-www-form-urlencoded,而form-data则主要用于文件上传等特定场景。

选择哪种编码方式取决于具体的应用场景和需求。

标签:www,Http,form,application,urlencoded,编码方式,data
From: https://www.cnblogs.com/blogtech/p/18336201

相关文章

  • WebApi连接数据库报错:尝试加载Oracle客户端时引发BadImageFormatException
    出现的问题  今天在公司用C#搭建一个WebApi服务,接受请求并连接数据库进行查询,但连接数据库时报错:尝试加载Oracle客户端时引发BadImageFormatException。如果安装32位客户端组件的情况下以64位模式运行,将出现此问题。问题点  我之后了解点,确定了OracleClient客户端确实安装......
  • 将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python
    我有一个Node.js客户端代码,它将请求发送到HTTP服务器,然后连续接收分块编码数据。这是带有一些流量数据输出的Node.js代码。consthttp=require('http');constoptions={hostname:'...',path:'...',port:...,...};constreq=http.request(......
  • Apache HttpClient发送文件时中文名变问号
    使用ApacheHttpClient发送multipart/form-data,包含有中文名的文件,对方收到的文件名中文变成了问号解决方法:发送方需要设置mode为HttpMultipartMode.RFC6532发送端代码如下,其中关键行为builder.setMode(HttpMultipartMode.RFC6532);importorg.apache.http.HttpEntity;impor......
  • 一图看懂Git、HTTPS、Docker、k8s和微服务
    一图看懂Git、HTTPS、Docker、k8s和微服务......
  • Visual Studio 2022 WinForm/Wpf打包安装程序
     VisualStudio2022WinForm/Wpf打包安装程序1.安装扩展程序2.创建并设置用于打包安装程序的项目2.1新建SetupProject项目2.2添加需要打包的应用程序文件2.3添加项目主程序2.3添加主程序的桌面和任务栏快捷方式2.5添加卸载程序2.6添加卸载程序快捷方式2.7......
  • RPC和 HTTP协议
    RPC和HTTP的区别服务发现HTTP,知道服务域名,可以通过DNS解析得到服务的IP地址,从而进行访问RPC需要一个专门的中间服务去保存服务名和IP信息(注册中心,nacos、consul),想要访问某个服务,就得同时注册到中间服务,然后获取需要顶用服务的IP和端口信息底层链接形式HTTP/1.1......
  • NIS(Network Information Services)服务端在R系部署,客户端rpm,deb简单使用
    #!/bin/bash####@Author:[email protected]#@Date:2024-05-28#@LastEditors:[email protected]#@LastEditTime:2024-07-19#@FilePath:NIS-use.sh#@Description:NIS(NetworkInformationServices)source:https://www.th......
  • 基于 STM32 的 NAS私有云盘搭建:集成LwIP 协议、HTTP/HTTPS、WEB前端技术栈(代码示例)
    项目概述在本项目中,我们将搭建一个基于STM32的NAS(网络附加存储)私盘,通过网络访问存储在外部SATA硬盘上的文件。该项目将使用STM32开发板、外接SATA硬盘、LwIP协议栈以及FATFS文件系统来实现文件的上传、下载和管理,用户可以通过简单的Web界面进行操作。系统设计......
  • OpenAI发布PVG:用小模型验证大模型输出解决“黑盒”难题,韩国团队拆分Transformer注意力
    OpenAI发布PVG:用小模型验证大模型输出解决“黑盒”难题,韩国团队拆分Transformer注意力让大模型解码提速20倍,微软、OpenAI、英特尔、谷歌、英伟达,成立开源大模型安全联盟。在今年的7月11日,全球著名开源大模型分享平台HuggingFace与专业数学大模型平台Numina合作,共同角逐AI......
  • 浅谈取样器之HTTP请求
    浅谈取样器之HTTP请求HTTP请求(HTTPRequest)是进行Web应用负载测试时最常用的取样器类型,允许用户模拟各种HTTP请求,如GET、POST等,以评估服务器在不同负载条件下的表现。添加HTTP请求线程组:在刚创建的线程组上右键>“添加(Add)”>“取样器(Sampler)”>“HTTP请求(H......