get和post的区别

不少同学在面试中会被问到http请求里,get和post的区别,这个问题主要目的还是面试官希望了解大家对HTTP请求了解程度,对于这个问题,网上会有着很多不同的答案,甚至有些答案还是错误的,容易让大家产生一些误区从而无法自拔,下面我先来整理一下

1、post用于修改,get是用于资源获取的获取、读取数据

其实这里最根本的区别,也就是http定义get和post的基本,但是并不是绝对的,不少公司也会用post获取数据,get提价数据,多是可行的。

2、post发送的数据更大,get有长度限制

其实这里有个误区,会觉得get的url会有长度限制,有的人会告诉我是1024字节,其实是不对的。

http协议从未规定get/post的请求长度是多少,限制url长度的通常是浏览器或者web服务器,而且每个浏览器的限制长度都不相同。post请求也不是完全没有限制,也是需要依赖与web服务器或者依赖服的服务器,比如Tomcat默认限制大小就是2M,当然也可以取消这个限制,只要你对你的网络传输有足够的的信心就行。

总结一下:

1、http协议并未规定get和post的长度限制 ;

2、get最大长度限制是因为浏览器和web服务器限制了URL的长度;

3、不同的浏览器和web服务器,限制的最大长度不一样。

3、各个浏览器和web服务器的最大长度总结

  • 浏览器
    • IE:IE浏览器(Microsoft internet Explorer)对url长度限制是2083(2k+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。
    • Firefox:Firefox(火狐浏览器)的url长度限制为65 536字符,但实际上有效的URL最大长度是不少于100 000个字符。
    • Chrome:Chrome(谷歌)的url长度限制超过8182个字符返回本文头时列出的错误。
    • Safari:Safari的url长度限制至少为80 000字符。
    • Opera:opera浏览器的url长度限制为190 000 字符。Opera9 地址栏中输入190 000字符时依然能正常编辑。
  • 服务器
    • Apache:Apache能接收url长度限制为8192字符
    • IIS:Microsoft Internet information server(IIS) 能接受url长度限制为16384个字符。这个是可以通过修改的(IIS7) 

configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.

4、get的参数通常方式URL上,post的参数通常方式body里

当然这个是常规做法,post的参数要放URL上,也是可以的,只是看服务端想怎么取了。

5、get比post更快

为什么get会比post更快?

  1. post请求包含更多的请求头,因为post需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段(如:content-type),但这个是微乎其微的。
  2. post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。这个就需要对TCP有一定了解,说的简单的,post会有一次服务器返回100 Continue响应。
  3. get可以将数据缓存起来,而post不会。
  4. post不能进行管道化传输,而get支持。所谓管道化传输,就是将多个HTTP要求整批提交的技术,而在传送过程中不需先等待服务端的响应。这个说起来有点复杂,不在这里展开了,有兴趣的同学可以去网上查询相关资料。

6、 post比get更加安全

其实这里也会有一个误区,不少人在面试的时候会告诉我,因为get的请求会暴露在URL上,像登录这样的接口,账号密码会显示在浏览器地址栏上,所以不安全。 这样的回答其实是有些问题的,http协议中提到get是安全的方法(safe method)。其意思是说get方法不会改变服务器端数据,所以不会产生副作用。如果是该用post的地方用了get,又说get不安全,那get也太冤枉了,而且get的请求不一定都是放在浏览器的地址上的。

在我看来post和get更加安全注意还是以下几点:

  1. post数据默认不会被客户端缓存
  2. post能发送更多的数据类型和各种编码或者进行非对称加密,而get只能发送ASCII字符
  3. 就是前面提到的,post不能进行管道化传输以及post在真正接收数据之前会先将请求头发送给服务器进行确认

当然,以上只是我的个人看法,可能也不全对,我也会继续学习,后续会持续补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值