HTTP post上传 小纪
来源:互联网 发布:qq飞车幽浮数据 编辑:程序博客网 时间:2024/06/14 10:18
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>
<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
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
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值。当数据是文件时可以看例子中的写法,很清楚的写明了。
0 0
- HTTP post上传 小纪
- HTTP post 上传
- http post 上传文件
- HTTP POST上传
- HTTP POST上传文件
- http post上传数据
- http post 文件上传解析
- http协议 文件上传 POST
- http post方式上传文件
- 通过 HTTP POST 上传文件到服务器.
- HTTP POST的文件上传问题
- 通过 HTTP POST 上传文件到服务器.
- 通过 HTTP POST 上传文件到服务器
- vc++ post http实现文件上传
- 基于 HTTP POST multipart 的文件上传
- Android 通过HTTP POST 上传图片文件
- iOS通过http post上传图片
- iOS通过http post上传图片
- jdbc创建-mysqls
- Jmeter之逻辑控制器(Logic Controller)
- MOD算法学习
- 计算机网络基础知识总结
- Unity如何挂接Android程序
- HTTP post上传 小纪
- Python3.x 生成exe文件
- list_entry()详解
- c++作业2
- Android 快速开发系列 打造万能的ListView GridView 适配器
- HDU 1103 Flo's Restaurant(模拟+优先队列)
- css抖动
- SPI协议及其工作原理浅析
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql