enctype='multipart/form-data'在HTML表单中是什么意思?我们应该在什么时候使用它?

推荐答案

在发出POST请求时,必须以某种方式对构成请求主体的数据进行编码.

HTML表单提供了三种编码方法.

  • application/x-www-form-urlencoded(默认值)
  • multipart/form-data
  • text/plain

增加application/json人的工作正在进行中,但这一点已经被放弃了.

(对于使用除HTMLForm深渊翻滚之外的其他方式生成的HTTP请求,也可以进行其他编码.JSON是用于Web服务的通用格式,有些仍在使用SOAP.)

格式的细节对大多数开发人员来说并不重要.重点是:

  • 千万不要用text/plain.

编写客户端代码时:

  • use multipart/form-data个 when your form includes any <input type="file"> elements
  • otherwise you can use multipart/form-data个 or application/x-www-form-urlencoded but application/x-www-form-urlencoded will be more efficient

编写服务器端代码时:

  • 使用预先编写的表单处理库

大多数(比如Perl的CGI->param或PHP的$_POST superglobal公开的)都会为您处理这些差异.不要费心解析服务器接收到的原始输入.

有时,您会发现无法同时处理两种格式的库.js处理表单数据最流行的库是body-parser,它不能处理多部分请求(但是文档中推荐了一些可以处理的替代方案).


如果您正在编写(或调试)用于解析或生成原始数据的库,那么您需要开始担心其格式.出于兴趣,你可能也想知道.

application/x-www-form-urlencoded与URL末尾的查询字符串大致相同.

multipart/form-data个要复杂得多,但它允许在数据中包含整个文件.结果的一个例子可以在HTML 4 specification中找到.

text/plain是由HTML5引入的,仅对调试有用(从the spec:They are not reliably interpretable by computer开始),我认为其他与工具(如大多数浏览器的开发工具中的the Network Panel)相结合的工具对此更好).

Html相关问答推荐

用完全透明的边框切割出圆圈?

如何将数据发送到Flask 应用程序中的表单文本框

如何通过将项目包裹在迪夫中来保持最右列的对齐方式来对齐项目?

使用网格时图像溢出容器高度

如何在css中将包含多行文本的多个p-tag放在一起(并排)?

如何使我的组织 struct 图的连接线响应?

如何使用html和css将两个项目垂直对齐

在NzMessageService中传递动态TemplateRef- Angular 15

更改垫子输入的涟漪 colored颜色

这<;td&>如何溢出<;表>;?

将表格背景图像置于行背景 colored颜色 之上

使用bash从html表格中提取表格

Web 组件 #shadow-root css 泄漏到文档

为什么 html 元素的 max-width 和 width 一起工作?

jquery向单词中的一组字母添加跨度

如何使用 Flutter 构建 Chrome 扩展?

在span中添加

在Angular中,类型"HTMLDivElement"不能分配给类型"Node"

CSS 中的 fingerprint scanner 动画

无法使用 flexbox 裁剪图像