HTTP post上传 小纪
2016-03-28 11:24
399 查看
POST上传数据
URL方面提交时,浏览器不做修正,需要自己将不合法的地方转化成16进制的码值。
例子如下:
如果其URL值存在非法字符(如中文字符),应将其进行URL Encoding处理。URL Encoding的处理方法如下:
字母数字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不变。
特殊字符 "."、"-"、"*" 和 "_" 保持不变。
空格字符 " " 转换为一个加号 "+"。
所有其他字符都是不安全的,因此首先使用一种编码机制将它们转换为一个或多个字节。然后对每个字节用一个包含 3 个字符的字符串 "%xy" 表示,其中 xy 为该字节的两位十六进制表示形式。推荐的编码机制是 UTF-8。
将“中文”两个字符进行URL Encoding所得到的值就是“%E4%B8%AD%E6%96%87”。
Content type很重要,因为post方式将数据放在了request body中,而request中数据的编码方式由content type决定
例子如下
一、当content type的值为application/x-www-form-urlencoded时
<form action="checkUser.html" method="POST">
<input type="hidden" name="opt" value="中文"/>
<input type="text" name="username" value="yyy"/>
<input type="text" name="age" value="zzz"/>
<inupt type="submit" value="submit"/>
</form>
表单提交时,HTTP头部信息如下:
POST /hello/checkUser.html HTTP/1.1
Accept: */*
Referer: http://localhost:8000/hello/index.jsp
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8000
Content-Length: 43
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=4EF9C5B81356481F470F3C60D9E77D94
opt=%E4%B8%AD%E6%96%87&username=yyy&age=zzz
传递的数据参数都被放在了request body中(cookie后面的部分),header中比get方式多规定了content-length和content-type,URL上没有跟数据。
二、当content type的值为multipart/form-data时
<form action="checkUser.html?opt=xxx" method="POST"
enctype="multipart/form-data">
<input type="text" name="username" value="yyy"/>
<input type="text" name="age" value="zzz"/>
<input type="file" name="file" />
<inupt type="submit" value="submit"/>
</form>
表单提交时HTTP头部信息如下:
POST /hello/checkUser.html?opt=xxx HTTP/1.1
Accept: */*
Referer: http://localhost:8000/hello/index.html
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7d931c5d043e
Accept-Encoding: gzip, deflate
Host: localhost:8000
Content-Length: 382
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=6FE3D8E365DF9FE26221A32624470D24
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="username"
yyy
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="age"
zzz
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="file"; filename="C:\1.txt"
Content-Type: text/plain
hello
-----------------------------7d931c5d043e
当multipart传输时,opt参数跟在了URL后面,其他参数被放在了request body中(cookie后面的部分),content-type中还规定了一个boundary,我的理解这就是个分割线(为了分割出不同数据的边界而存在的)。有意思的是request body里面的内容,每个数据都需要申明自己的内容类型,也就是content-disposition这个参数,然后是name(key值名称),换行!!!!
val值。当数据是文件时可以看例子中的写法,很清楚的写明了。
URL方面提交时,浏览器不做修正,需要自己将不合法的地方转化成16进制的码值。
例子如下:
如果其URL值存在非法字符(如中文字符),应将其进行URL Encoding处理。URL Encoding的处理方法如下:
字母数字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不变。
特殊字符 "."、"-"、"*" 和 "_" 保持不变。
空格字符 " " 转换为一个加号 "+"。
所有其他字符都是不安全的,因此首先使用一种编码机制将它们转换为一个或多个字节。然后对每个字节用一个包含 3 个字符的字符串 "%xy" 表示,其中 xy 为该字节的两位十六进制表示形式。推荐的编码机制是 UTF-8。
将“中文”两个字符进行URL Encoding所得到的值就是“%E4%B8%AD%E6%96%87”。
Content type很重要,因为post方式将数据放在了request body中,而request中数据的编码方式由content type决定
例子如下
一、当content type的值为application/x-www-form-urlencoded时
<form action="checkUser.html" method="POST">
<input type="hidden" name="opt" value="中文"/>
<input type="text" name="username" value="yyy"/>
<input type="text" name="age" value="zzz"/>
<inupt type="submit" value="submit"/>
</form>
表单提交时,HTTP头部信息如下:
POST /hello/checkUser.html HTTP/1.1
Accept: */*
Referer: http://localhost:8000/hello/index.jsp
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8000
Content-Length: 43
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=4EF9C5B81356481F470F3C60D9E77D94
opt=%E4%B8%AD%E6%96%87&username=yyy&age=zzz
传递的数据参数都被放在了request body中(cookie后面的部分),header中比get方式多规定了content-length和content-type,URL上没有跟数据。
二、当content type的值为multipart/form-data时
<form action="checkUser.html?opt=xxx" method="POST"
enctype="multipart/form-data">
<input type="text" name="username" value="yyy"/>
<input type="text" name="age" value="zzz"/>
<input type="file" name="file" />
<inupt type="submit" value="submit"/>
</form>
表单提交时HTTP头部信息如下:
POST /hello/checkUser.html?opt=xxx HTTP/1.1
Accept: */*
Referer: http://localhost:8000/hello/index.html
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7d931c5d043e
Accept-Encoding: gzip, deflate
Host: localhost:8000
Content-Length: 382
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=6FE3D8E365DF9FE26221A32624470D24
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="username"
yyy
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="age"
zzz
-----------------------------7d931c5d043e
Content-Disposition: form-data; name="file"; filename="C:\1.txt"
Content-Type: text/plain
hello
-----------------------------7d931c5d043e
当multipart传输时,opt参数跟在了URL后面,其他参数被放在了request body中(cookie后面的部分),content-type中还规定了一个boundary,我的理解这就是个分割线(为了分割出不同数据的边界而存在的)。有意思的是request body里面的内容,每个数据都需要申明自己的内容类型,也就是content-disposition这个参数,然后是name(key值名称),换行!!!!
val值。当数据是文件时可以看例子中的写法,很清楚的写明了。
相关文章推荐
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- Apple官网研究之使用Justify布局导航
- 通过Mootools 1.2来操纵HTML DOM元素
- jQuery Html控件基本操作(日常收集整理)
- WEB标准网页布局中尽量不要使用的HTML标签
- Flash 与 html 的一些实用技巧
- html工作中表格<tbody>标签的使用技巧
- HTML 向 XHTML1.0 兼容性指导
- C#自写的一个HTML解析类(类似XElement语法)
- 没有文件大小限制并免费的PDF到HTML转换工具
- JavaScript与HTML结合的基本使用方法整理
- css实现气泡框效果(实例加图解)
- html链接与文本标签们
- html活用软字符连接符
- 浅谈html中id和name的区别实例代码
- HTML <!DOCTYPE> 标签
- asp中实现清除html的函数
- Android的TextView与Html相结合的具体方法
- jQuery设置和获取HTML、文本和值示例