Get和POST提交的区别

前言

最近在复习J2EE的一些基础知识,在看到web客户端提交方式区别,发现之前忽视的一部分重点在这里总结记录一下。

常规区别(大部分人知道的区别)

对于web开发来说,get和post提交方式估计都写到吐了,当问起两者的区别时,我想大部分人和我的想法是一致的。

  • get提交时是将提交信息放在URL路径之后,以name=value的形式用&连接起来
    post提交是将提交信息放在了request body中

  • get仅支持URL编码,而post支持所有编码方式

  • get提交缺乏安全性,对于一些敏感信息直接暴露在路径之后是不安全的
    post提交更加安全一些

  • 对于参数的数据类型,get仅支持ASCll字符,而post没有限制

  • get请求会被浏览器主动cache,而post不会,除非手动进行设置

  • GET在浏览器回退时是无害的,而POST会再次提交请求

  • get提交会有长度限制,而post提交没有长度限制,可以传送大量数据

    本质区别(底层)

    get和post提交在本质上来讲是没有去区别的(这里是不是一些蒙圈了!别急,看下面的分析)
    get和post都是HTTP协议的两种提交方式而已。
    而HTTP协议的底层是由TCP/IP协议所支持的,所以get和post提交方式的底层也是TCP/IP协议实现的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
    GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同

    核心区别

    GET产生一个TCP数据包,POST产生两个TCP数据包!!

    解释来讲:
    对GET提交请求方式,浏览器会将http header和data一起发送出去,服务器响应200(返回数据);
    对POST提交请求方式,浏览器会先将http header发送出去,服务器响应100,然后浏览器再将data发送出去,服务器响应200(返回数据)

    看起来get方式发送一次速度会更加快,消耗会更小,但事实并不完全如此,不能用get完全替代post!!

  1. GET与POST都有自己的语义,不能随便混用。

  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值