4 回答
TA贡献1785条经验 获得超4个赞
当您发出POST请求时,您必须以某种方式对构成请求主体的数据进行编码。
HTML表单提供三种编码方法。
application/x-www-form-urlencoded
(默认)multipart/form-data
text/plain
正在进行添加工作application/json
,但这已被放弃。
(使用除HTML表单提交之外的其他方式生成的HTTP请求,可以进行其他编码。)
格式的细节对大多数开发人员来说无关紧要。重点是:
切勿使用
text/plain
。
在编写客户端代码时:
使用
multipart/form-data
时,你的形式包括任何<input type="file">
元素否则,你可以使用
multipart/form-data
或application/x-www-form-urlencoded
,但application/x-www-form-urlencoded
效率会更高
在编写服务器端代码时:
使用预先编写的表单处理库
大多数(例如Perl CGI->param
或PHP的$_POST
超全局公开的那个)将为您处理差异。不要费心去解析服务器收到的原始输入。
有时你会发现一个无法处理这两种格式的库。Node.js用于处理表单数据的最流行的库是body-parser,它不能处理多部分请求(但是有文档推荐一些替代方案可以)。
如果您正在编写(或调试)用于解析或生成原始数据的库,那么您需要开始担心格式。您可能还想了解它的利益。
application/x-www-form-urlencoded
与URL末尾的查询字符串大致相同。
multipart/form-data
更复杂但它允许整个文件包含在数据中。可以在HTML 4规范中找到结果的示例。
text/plain
由HTML 5引入并且仅用于调试 - 来自规范:它们不能被计算机可靠地解释 - 我认为其他的与工具相结合(如大多数浏览器的开发人员工具中的Net选项卡)更好为了那个原因)。
TA贡献1851条经验 获得超4个赞
enctype='multipart/form-data
是一种允许通过POST发送文件的编码类型。很简单,没有这种编码,文件无法通过POST发送。
如果要允许用户通过表单上载文件,则必须使用此enctype。
TA贡献1966条经验 获得超4个赞
提交表单时,您告诉浏览器通过HTTP协议发送网络上的消息,该消息正确地包含在TCP / IP协议消息结构中。HTML页面有一种向服务器发送数据的方法:使用<form>
s。
提交表单时,如果创建了HTTP请求并将其发送到服务器,则该消息将包含表单中的字段名称和用户填写的值。这种传输可以发生POST
或GET
HTTP方法。
说明如何将表单发送到服务器
属性enctype
只有在使用POST
方法时才有意义。指定后,它会指示浏览器通过以特定方式对其内容进行编码来发送表单。来自MDN - 表格enctype:
当method属性的值为post时,enctype是用于将表单提交给服务器的MIME内容类型。
application/x-www-form-urlencoded
:这是默认值。发送表单时,将收集所有名称和值,并对最终字符串执行URL编码。multipart/form-data
:字符不编码。当表单具有文件上载控件时,这很重要。您希望发送文件二进制文件,这可确保不改变比特流。text/plain
:空格被转换,但不再执行编码。
安全
提交表单时,可能会出现一些安全问题,如RFC 7578第7节:多部分表单数据中所述 - 安全注意事项:
所有表单处理软件都应该
灵敏地处理用户提供的表单数据,因为它通常包含机密或个人
识别信息。在Web浏览器中广泛使用表单“自动填充”功能; 这些可能用于欺骗用户
在完成其他
无害任务时不知不觉地发送机密信息。multipart / form-data不提供任何
检查完整性,确保机密性,避免用户
混淆或其他安全功能的功能; 这些问题必须
通过表格填写和表格数据解释应用程序来解决。接收表单并处理表单的应用程序必须小心,不要将数据提供回不打算发送的请求表单处理站点。
在解释Content-
Disposition头字段的文件名时,重要的是不要无意中覆盖
收件人文件空间中的文件。
如果您是开发人员,并且您的服务器将处理用户提交的表单(可能最终包含敏感信息),则会引起您的注意。
- 4 回答
- 0 关注
- 1819 浏览
相关问题推荐
添加回答
举报