您的位置:首页 > 理论基础 > 计算机网络

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值。当数据是文件时可以看例子中的写法,很清楚的写明了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  html