GET与POST的区别:
GET方式:
用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到URL中发送(http的header传送),也就是说,浏览器将各个字段元素及其数据依照URL参数的格式附加到请求行中的资源路径后面。另外重要的一点事,他会被客户端的浏览器缓存起来,别人就可以从浏览器的历史记录中,读取到此客户的数据,比如账号和密码。因此,在某些情况下,get方法会带来严重的安全问题。
POST方式
当使用POST方式时,浏览器把各表单字段元素及其数据作为HTTP消息的实体内容发送给web 服务器,而不是作为URL地址的参数进行传递,使用POST方式,传递的数据量要比使用GET方式传送的数据量大的多。
简要概述:
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求只能进行URL编码,而POST支持多种编码方式
- GET请求在URL中传送的参数是有长度限制的,传送的数据量较小;而POST中的参数不会被保留,post传送的数据量较大,一般被默认为不受限制。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。表单提交避免使用GET方式。
- GET参数通过URL传递,POST放在Request body中。
- GET方式,服务器端用request.QueryString获取变量的值。POST方式,服务器端用Request.Form获取提交的数据
深入剖析:
- GET和POST是http协议中的两种发送请求的方法。
- GET和POST的底层是TCP/IP,准确的说,GET/POST都是TCP链接。GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。两种方式的目的都是一致的,只是GET把参数包含在URL上,执行时,它首先设置method定为GET,并将要传送的数据存在URL里以便记录,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。POST通过request body传递参数,执行时,它需要服务器响应两次,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。
- GET和POST都有自己的语义,不能随便混用。据研究,当网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
- 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
ajax乱码问题:
产生乱码的原因:
1) xmlhttp返回的数据默认的额字符编码是UTF-8,如果客户端页面不是这个编码格式时,会出现乱码
2) post方法提交数据默认的字符编码是utf-8,如果服务器端不是这个格式的编码,依旧会出现乱码
解决办法有:
1、若客户端是gb2312编码,则在服务器指定输出流编码
2、服务器端和客户端都使用utf-8编码
3、如果按照下述代码,确定不是1 2的问题,依旧乱码,那就检查方式是否是get请求(或凡设计URL传递参数的),被传递的参数都要先经encodeURLComponent方法处理,如果没有用encodeURLCompent处理的话,也会产生乱码。
gb2312: header('Content-Type:text/html; charset=GB2312');
utf8: header('Content-Type: text/html; charset=utf-8');
何时使用GET请求,何时使用POST请求
GET请求的目的是给予服务器一些参数,以便从服务器获取列表。例如:list:sapx?page=1,表示获取第一页的数据
POST请求的目的是向服务器发送一些参数,例如form中的内容。
与POST相比,GET更简单也更快,而且在大部分情况下都能用。在以下情况中,请使用POST请求
- 无法使用缓存文件(更新服务器上的文件或数据库);
- 向服务器发送大量数据(post没有数据量限制);
- 发送包含未知字符的用户输入时,post比GET更稳定可靠
代码演示
关于post提交方式的代码。
1个表单,两个按钮,一个用于submit提交表单,一个位button跳转页面
<form action="/mySSH/regedit.do" name="user" method= "POST">
<span>名称:::</span>
<input type="text" name="username" id="username" value=""></br>
<span>password:::</span>
<input type="password" name="password" value="">
<input type="submit" name="method" value="添加用户">
<input type="button" name="userList" value="用户一栏" onClick="touserList()" >
</form>
<!--JavaScript-->
<script type="text/javascript">
function touserList() {
window.location.href = "userList do";
}
</script>
关于get提交方式的代码
一个表单,两个submit均用来提交表单,但是进行的处理不同。
<form action="" method="get">
<input type="submit" name="submit1" value="用户注册" onClick="input(this.form)">
<input type="submit" name="submit2" value="用户一览" onClick="list(this.form)">
</form>
<!--JavaScript -->
<script type="text/javascript">
function input(form){
form.action="input.do";
form.submit();
};
function list(form){
alert("用户一览");
form.action = "userList.do";
form.submit();
}
</script>