区别与联系:GET一般用来取数据Post一般用来提交数据
- get是从服务器上获取数据,post则是向服务器传送数据;
- get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面;Post是将表单中的数据放在请求的数据体中,按照变量和值相对应的方式,传递到action所指向URL;
所以从上述也可以得到另外两个结论:
- get传送的数据量较小,不能大于2KB,这主要是因为受URL长度限制。post传送的数据量较大,所以在上传文件只能使用Post。一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB;
- get安全性非常低(因为用户可以通过URL看到),post安全性较高(其所有操作对用户来说都是不可见的)。但是执行效率却比post方法好;
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集;
- Get是Form的默认方法;
- Get方式提交来的数据在服务器端用Request.QueryString()来获取,用Post方式提交的数据用Request.Form()来获取(这一点不是很明确);
建议:
1、如果是包含机密信息的话,建议用post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
所以如果有敏感数据是不应该用get方法的,但是有例外,就是ajax请求时候即使是敏感字段也可以用get。
关于响应速度:
- get请求是可以被客户端缓存的。比post高效。
- AJAX环境中get响应快速,post需要先发送header再发送post data;
关于安全:
- GET requests can be cached
- GET requests can remain in the browser history
- GET requests can be bookmarked
- GET requests can be distributed & shared
- 说 POST 比 GET 安全肯定是错的,POST跟GET都是明文传输;
- 语义上,GET是获取指定URL上的资源,是读操作,重要的一点是不论对某个资源GET多少次,它的状态是不会改变的,在这个意义上,我们说GET是安全的(不是被密码学或者数据保护意义上的安全);
- 因为GET是安全的,所以GET返回的内容可以被浏览器,Cache服务器缓存起来(其中还有很多细节,但不影响这里的讨论);
- 而POST的语意是对指定资源“追加/添加”数据,所以是不安全的,每次提交的POST,参与的代码都会认为这个操作会修改操作对象资源的状态;浏览器在你按下F5的时候会跳出确认框,缓存服务器不会缓存POST请求返回内容;