get和post

WEB前端 waitig 451℃ 百度已收录 0评论

因为浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。

HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。

HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。

  • GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。

  • POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。

  • PUT:PUT的英文含义是放置,也就是向服务器新添加数据,就是所谓的增。

  • DELETE:从字面意思也能看出,这种方式就是删除服务器数据的过程。

本质

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求

  • GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

  • POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。
    因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

服务器端获取值的方法

  • get方式提交的数据,服务器端使用request.QueryString获取变量的值

  • post方式提交的数据,服务器端使用request.Form获取数据

安全性

  • get方式安全性低,post方式较安全。但是post方式执行效率要比get方式差一些。

大小

  • URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

  • 理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • GET参数通过URL传递,POST放在Request body中。
  • GET产生一个TCP数据包;POST产生两个TCP数据包。
    • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    • 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。

  • GET与POST都有自己的语义,不能随便混用。
  • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  • 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

总结

  • get方式的安全性较post方式要差一些,所以,包含一些重要的信息的话,简易使用post数据提交方式

  • 在做查询统计的时候,使用get方式要更好一些;而在做数据的添加,修改或删除操作时,建议使用post数据提交方式


本文由【waitig】发表在等英博客
本文固定链接:get和post
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)