HTTP上传的基本知识
在Form元素的语法中,
EncType表明提交数据
的格式
Enctype 属性指定将数据回发到服务器时
浏览器使用的编码类型
-
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1& amp; amp;name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。
-
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
-
如果有 type=file的话,就要用到multipart/form-data了。
浏览器会把整个表单以控件为单位分割,并为每个部分加上 Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件 name)等信息,并加上分割符(boundary)。
POST 提交数据的几种方式
HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。
协议规定 POST 提交的数据必须放在消息主体
(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。
服务端
通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。
enctype 属性 (做)
enctype 属性规定在发送到服务器之前
应该如何对表单数据进行编码(这个属性管理的是表单的MIME编码)。
默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |