Java学习笔记:GET和POST的区别?

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议)是基于TCP/IP的关于数据在万维网中如何进行通信的一种协议,而GET和POST是HTTP协议中的两种发送请求的方法。

而GET和POST的具体区别有哪些呢?(相信大家都能够说出以下的区别)

1、GET把参数包含在URL中进行传递,而POST则通过request body传递参数

2、GET请求在URL中传送的参数是有长度限制的,而POST则没有

3、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

4、GET请求只能进行URL编码,而POST支持多种编码方式

5、GET请求会被浏览器主动cache,而POST不会,除非手动设置

6、GET请求参数会被完整保留在浏览器历史记录中,而POST参数不会被保留

7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制

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

9、GET产生一个TCP数据包;POST产生两个TCP数据包。

以上都是大家面试过程中耳熟能详的答案,但是GET和POST从另一角度来说又是没有区别的,HTTP协议的底层是TCP/IP协议,所以GET和POST的底层也是TCP/IP协议,都是TCP链接而已,所以说GET和POST能做的事情是完全一样的,如果强行给POST加上URL参数,或者给GET加上request body,在技术上都是能够行得通的。

但是上述的那些区别又是什么意思呢?

在万维网世界中,通过TCP/IP协议来传输数据,而HTTP协议则是传输过程中的规则,HTTP协议给传输定义了好几个服务类别,包括GET、POST、PUT、DELETE等。也就是说,TCP才是GET和POST怎么实现的基本。

但是HTTP对GET和POST参数的传递渠道提出了要求,参数大小的限制又是谁规定的呢?

不同的浏览器(发起http请求)和服务器(接受http请求)会控制数据量的大小,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,但是使用request body也传送了数据,不同服务器的处理方式也是不同的,有些服务器会帮你读出数据,有些服务器则直接忽略,所以说虽然GET可以带request body,也不能保证一定能被接收到。

 

常见问题:

1、POST 方法会产生两个TCP数据包?

有些文章中提到,post 会将 header 和 body 分开发送,先发送 header,服务端返回 100 状态码再发送 body。

HTTP 协议中没有明确说明 POST 会产生两个 TCP 数据包,而且实际测试(Chrome)发现,header 和 body 不会分开发送。

所以,header 和 body 分开发送是部分浏览器或框架的请求方法,不属于 post 必然行为。

2、POST 方法比 GET 方法安全?

按照网上大部分文章的解释,POST 比 GET 安全,因为数据在地址栏上不可见。

然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。

要想安全传输,就只有加密,也就是 HTTPS。

3、GET 方法的长度限制是怎么回事?

在网上看到很多关于两者区别的文章都有这一条,提到浏览器地址栏输入的参数是有限的。

首先说明一点,HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。

浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。

4、GET请求比POST请求效率高,Post请求先发送Header,需要服务器返回100再发送数据处理,而Get请求直接是通过URL发送数据。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值