GET与POST的区别与选取

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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值