get和post的区别?

第一次在掘金上写东西,萌新表示如今瑟瑟发抖,哪里说得不对还望各位大佬纠正┓( ´∀` )┏web

最直观的就是语义上的区别浏览器

  • get用来获取数据,post用来提交数据
  • get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制,最长2048字节),而post无限制。
  • get请求的数据会附加在url之 ,以 " ? "分割url和传输数据,多个参数用 "&"链接,而post请求会把请求的数据放在http请求体中。
  • get是明文传输,post是放在请求体中,可是开发者能够经过抓包工具看到,也至关因而明文的。
  • get请求会保存在浏览器历史记录中,还可能保存在web服务器的日志中

从当前角度来看,post相对get比较安全,至少请求的数据在url上不可见。然而真的只有这些吗???

错,错了?????

  • 那到底安全仍是不安全呢?????

这个时候你首先得肯定是用什么来定义安全(举个栗子)缓存

  • 你让我爸爸妈妈叔叔阿姨去看这个url,你以为安全吗?
  • 你让一个初级测试工程师去测试这个接口,你以为安全不?
  • 你让安全测试工程师去看看get请求呢? 因此人群不一样,安全的定义就不同
  • 真相

首先get和post在本质上都是tcp连接,但因为http协议和浏览器或者服务器的限制,从而使它们在应用过程当中产生了差异,可是它们中还有一个较大的区别:get在请求时发送一个数据包,会将header和data一块儿发送过去,而post会产生两个数据包先发送header,服务器返回100,而后在发送data,服务器返回200安全

因此当你一层一层的把get和post剖析到底,你会发现他们的本质就是tcp链接,没有啥区别,只是因为http协议规定和浏览器或者服务器的限制,致使他们在应用过程当中体现形式不一样。服务器

RFC是什么鬼?

前段时间在看到有人在谈论这个问题的时候有人扯出了RFC,那么什么是RFC呢。tcp

  • Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。(来自百度百科)

这样说吧!RFC就是互联网的规范,咱们一般所说的协议就是RFC的方式存在,http/1.1规范中RFC7231中涉及到了几个http的方法,其中定义了几个性质:工具

1.safe(安全)post

这里的安全和一般所理解的安全意义不一样,就比如若是一个请求的语义本质上就是获取数据(只读),那么这个请求就是安全的。客户端向服务器发起的请求若是没有引发服务器端任何的状态变化,那么他就是安全的而post请求来提交数据必然会是服务器发生相应的变化。从这个维度来看,get请求相对服务器而言,是安全的,post则不安全的。测试

ldempotend(幂等)url

幂等通俗的来说就是指同一个请求执行屡次和仅执行一次的效果彻底相等。这里来扯出幂等主要是为了处理同一个请求重复发送的状况,假如在请求响应以前失去链接,若是这个请求时幂等的,那么就能够放心的重发一次请求。因此能够得出get请求时幂等的,能够重复发送请求,post请求时不幂等的,重复请求可能会发生没法预知的后果。

cacheable(可缓存性)

顾名思义,就是一个请求是否能够被缓存,绝大多数部分,post都是不可缓存的(某些浏览器可能支持post缓存),但get是能够缓存的。

勉强理解一下大概就是:

get是请求获取指定资源,get方法时安全、幂等、可缓存的,get方法的报文主体没有任何语义。

post是根据报文主体来对指定资源作出处理,post不安全,不幂等,不可缓存(大部分状况下)。

好了,今天就先扯这么多,有大佬发现不对请帮我纠正纠正,蟹蟹蟹蟹啦!先溜!

相关文章
相关标签/搜索