Ajax 中经常用到 get 和 post 请求,那么什么时候用 get 请求,什么时候用 post 方式请求呢? 在回答前先要了解 get 和 post 的区别。
一个在 url 中,一个在虚拟载体里
get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,值和表单内各个字段一一对应,在 URL 中可以看到。post 是通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML HEADER 内一起传送到 ACTION 属性所指的 URL 地址。用户看不到这个过程。
获取参数
对于 get 方式,服务器端用 Request.QueryString 获取变量的值,对于 post 方式,服务器端用 Request.Form 获取提交的数据。两种方式的参数都可以用 Request 来获得。
传输数据大小
get 传送的数据量较小,不能大于 2KB。post 传送的数据量较大,一般被默认为不受限制。但理论上,因服务器的不同而异。
安全方面
get 安全性低,post 安全性较高。
参数列表
跟 是一样的,也就是说,method 为 get 时 action 页面后边带的参数列表会被忽视;而 跟 是不一样的。另外,get 请求有如下特性:它会将数据添加到 URL 中,通过这种方式传递到服务器,通常利用一个问号?代表 URL 地址的结尾与数据参数的开端,后面的参数每一个数据参数以 “名称=值” 的形式出现,参数与参数之间利用一个连接符&来区分。post 请求有如下特性:数据是放在 HTTP 主体中的,其组织方式不只一种,有&连接方式,也有分割符方式,可隐藏参数,传递大批数据,比较方便。
总结
当我们要传送一个较大的数据文件时,需要用 post。当传递的值只需用参数方式 (这个值<=2KB) 的时候,用 get 方式即可。举例说明:发送数据 username=张三
GET 方式, 浏览器键入 http://localhost?username=张三
GET /?username=%E5%BC%A0%E4%B8%89 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, /
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
POST 方式:
POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, /
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Content-Length: 28
Connection: Keep-Alive
username=%E5%BC%A0%E4%B8%89
比较以上,可以发现 get 方式把表单内容放在前面的请求头中,而 post 则把这些内容放在请求的主体中了, 同时 post 中把请求的 Content-Type 头设置为 application/x-www-form-urlencoded,而发送的正文都是一样的, 可以这样来构造一个表单提交正文:
encodeURIComponent(arg1)=encodeURIComponent(value1)&encodeURIComponent(arg2)=encodeURIComponent(value2)&...
GET 方式
1
2
3
4
var postContent ="name=" + encodeURIComponent("xiaocheng") +
"&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("GET", "somepage" + "?" + postContent, true);
xmlhttp.send(null);
POST 方式1
2
3
4
5
6
var postContent ="name=" + encodeURIComponent("xiaocheng") +
"&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("POST", "somepage", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(postContent);
参考:http://www.javaeye.com/topic/148033