1 引言
我想大家在面试中应该常常有被问到POST和GET申请的区别,很多人都会答复诸如POST比GET平安,GET比POST传输的长度要少之类的,然而,这会是面试官想要的答案么?这样的答复听下来不免像是囫囵吞枣的背诵下来的,并且就算是背,多少也得晓得一下原理呀。明天,少侠就带着问题和大家一起看看POST和GET申请的区别。
2 HTTP协定
2.1 HTTP协定的特点
首先,咱们应该晓得,无论是POST还是GET申请,都是基于超文本传输协定(HTTP)的,而HTTP协定是TCP/IP协定族的应用层协定。
HTTP协定客户端申请request音讯包含以下格局:申请行(request line)、申请头部(header)、空行、申请数据
;
服务端响应response也由四个局部组成,别离是:响应行、响应头、空行、响应体
。
2.2 申请办法
HTTP协定定义了多种申请形式,具体如下:GET
:获取资源,用来申请拜访已被URI(对立资源标志符,和URL是蕴含和被蕴含的关系)辨认的资源。POST
:用来传输实体的主体,尽管GET也能够实现,然而个别不必。PUT
:传输文件。然而鉴于PUT办法本身不带验证机制,任何人都能够上传文件,存在安全性问题,因而个别网站都不采纳该办法。HEAD
:取得报文首部。和GET申请一样,只是不返回报文主体局部。DELETE
:删除文件。同样不带验证机制,存在安全性问题。OPTIONS
:询问指定的申请URI反对哪些办法。TRACE
:追踪门路,让Web服务器将之前的申请通信环回给客户端的办法。CONNECT
:要求在与代理服务器通信时建设隧道,实现隧道协定进行TCP通信。
3 POST和GET申请区别的常见误区
3.1 申请参数长度限度:GET申请长度最多1024kb,POST对申请数据没有限度
对于此点,在HTTP协定中没有对URL长度进行限度,这个限度是不同的浏览器及服务器因为有不同的标准而带来的限度。
3.2 GET申请肯定不能用request body传输数据
GET能够带request body,但不能保障肯定能被接管到。如果你用GET服务,在request body偷偷藏了数据,不同服务器的解决形式也是不同的,有些服务器会帮你读出数据,有些服务器间接疏忽。
3.3 POST比GET安全性要高
这里的平安是相对性,通过GET提交的数据都将显示到URL上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而POST不会。另外GET提交数据还可能会造成CSRF攻打。
3.4 GET产生一个TCP数据包,POST产生两个TCP数据包
对于GET形式的申请,浏览器会把http header和data一并发送进来,服务器响应200 OK(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)。留神,只管POST申请会分两次,但body 是紧随在 header 前面发送的,基本不存在『期待服务器响应』一说
。
4 POST和GET申请的区别小结
申请参数:GET申请参数是通过URL传递的,多个参数以&连贯,POST申请放在request body中。
申请缓存:GET申请会被缓存,而POST申请不会,除非手动设置。
珍藏为书签:GET申请反对,POST申请不反对。
安全性:POST比GET平安,GET申请在浏览器回退时是有害的,而POST会再次申请。
历史记录:GET申请参数会被残缺保留在浏览历史记录里,而POST中的参数不会被保留。
编码方式:GET申请只能进行url编码,而POST反对多种编码方式。
对参数的数据类型:GET只承受ASCII字符,而POST没有限度。
这里还想补充阐明一点,就是通过浏览器地址栏输出URL拜访资源的形式都是GET
申请。
我是少侠露飞。爱技术,爱分享。