码迷,mamicode.com
首页 > Web开发 > 详细

浅析http请求头常见的表单文件上传

时间:2016-05-07 08:52:11      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

首先先了解下application/x-www-form-urlencoded和multipart/form-data的区别

application/x-www-form-urlencoded:

是常用的表单发包方式,普通的表单提交,或者js发包,默认都是通过这种方式,

<form enctype="application/x-www-form-urlencoded" action="http://" method="POST">
    <input type="text" name="name" value="homeway">
    <input type="text" name="key" value="nokey">
    <input type="submit" value="submit">
</form

当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

当action为post时候,浏览器把form数据封装到http body中,然后发送到server。


multipart/form-data:

上传张图片看看

Content-Type: multipart/form-data; boundary=---------------------------27646987427698
Content-Length: 198449

-----------------------------27646987427698
Content-Disposition: form-data; name="x1"

52
-----------------------------27646987427698
Content-Disposition: form-data; name="y1"

个人理解区别在于:如果没有 type=file 的控件,form表单会自动form的enctype属性为编码方式默认的 application/x-www-form-urlencoded

,常用有两种: application/x-www-form-urlencoded 和 multipart/form-data ,

但是如果有 type=file 的话,就要用到 multipart/form-data 了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file)、Content-Type(默认为text/plain)、name(控件name)等信息,并加上分割符(boundary)。


通过表单提交数据的方法有两种,一种是GET 方法,另一种是 POST
方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应用POST 方法。 HTML 代码中,在<form> 标签中添加以下代码可以页面显示一个选择文件的控件。
<input type="file" name="file01">
在页面中显示如下(可能随浏览器不同而不同)可以直接在文本框中输入文件名,也可以点击按钮后弹出供用户选择文件的对话框。
浏览器编码
在向服务器端提交请求时,浏览器需要将大量的数据一同提交给Server 端,而提交前,浏览器需要按照Server 端可以识别的方式进行编码,对于普通的表单数据,这种编码方式很简单,编码后的结果通常是

field1=value2&field2=value2&的形式,如这种编码的具体规则可以在rfc2231 里查到,通常使用的表单也是采用这种方式编码的,

Servlet 的
API 提供了对这种编码方式解码的支持,只需要调用ServletRequest
类中的方法就可以得到用户表单中的字段和数据。

 
这种编码方式(

 application/x-www-form-urlencoded

)虽然简单,但对于传输大块的二进制数据显得力不从心,对于传输这类

数据,浏览器采用了另一种编码方式,即

 "multipart/form-data"



的编码方式,采用这种方式,浏览器可以很容易的表单内的数据和

文件一起。这种编码方式先定义好一个不可能在数据中出现的字符串作为分界符,然后用它将各个数据段分开,而对于每个数据段都

对应着HTML 页面表单中的一个Input 区,包括一个content-disposition

属性,说明了这个数据段的一些信息,如果这个数据段

的内容是一个文件,还会有Content-Type 属性,然后就是数据本身。

 


浅析http请求头常见的表单文件上传

标签:

原文地址:http://blog.csdn.net/shenjianxz/article/details/51331961

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!