博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

The difference between Post and Get

Posted on 2007-03-26 14:55  Snapping  阅读(265)  评论(0编辑  收藏  举报
http 协议一共有4种方式:其中两种是 GET 和 POST,另外两个不常用。

get 是通过附加在 url 后面,以查询字符串的方式,来发送请求
比如你写一个 <form method="get"> <input name="username" value="snapping" /> </form>
发出请求时,效果完全等同于 xxx.asp?username=snapping 这样一个请求
get 因为 url 长度有限制,所以可以传输的东西是比较少的并且有一定的限制。
post 呢,本质上是通过附加 http header 的方式来发送,并不包含在 url 请求中,而是在附加的 header 信息里
<form method="POST"> 里面的字段信息,会被重新组合,也许通过编码,
形成一个信息,通过 header 发出去。你用 Fiddler 看一下就比较清楚。
自己写两个最简单的测试表单。发送请求看看中间的 http 交互过程。
所以 post 能传输的数据比较多。
但是,也有一定的上限。我们以前就遇到过,
在做 ADR网站的时候。后来通过一些技巧在上传前,用 js 把信息拆分到多个动态产生的 textarea 控件里面。
使得每一个控件的信息不超出限制
发送到服务器端,asp接到的信息再重新拼接还原。
POST 需要了解的另一个就是上传文件时,
必须设置 <form method="POST" enctype="multipart/form-data">
这个是指示编码方式,
文件的内容,实际在发送前会被二进制的方式读取,编码形成一个字符串。然后组合在请求的 header 里面。asp, php, asp.net, .. 各种服务器端语言,处理文件上传大同小异,其本质都是要能获取这种请求。根据获取的编码后的文件内容,还原出文件的二进制字节流,另存到服务器上。只不过其具体实现的封装各有不同。
原理都必须遵守 RFC XXX 的,具体哪一个 RFC 我不记得了。如果要研究文件上传,也可以用 Fiddler 看的。
各种 asp 的无组件上传程序,干的就是这个事情。分析 raw 信息,重新组合为文件。