HTTP请求-幂等、安全概念
一、安全
最近学习到网络的时候,对于HTTP请求也有进一步的提升。
此处先用一张图来解释下。这里的安全,我们可以看到GET请求是安全的,而POST请求是不安全的,这里可能会有人问了?
为什么?因为这里的安全其实是分概念来讲的,就好比我GET请求如果去做登录操作是直接拼接参数到URL中的,这当然就是不安全的,而我POST请求如果是做登录操作,是把数据写到request body里面的相对来说安全。
但是我们这里的安全指的是是否会给服务器带来副作用,意思就是说我去发送请求会不会改变服务器的状态,就比如说我发送GET请求其实只是会获取服务器的资源,而不是去更改了服务器的资源,但是我POST请求就会去更改服务器的状态,去更改服务器的资源,这样有的时候可能就会发送一些错误,所以说它不安全。二、幂等
幂等,这里再介绍下幂等的概念,HTTP 幂等方法是指无论调用多少次都不会有不同结果的 HTTP 方法。它无论是调用一次,还是十次都无关紧要。结果仍应相同。再次强调, 它只作用于结果而非资源本身。就比如说我调用GET方法只是去请求资源自然每次调用结果都是相同的,就是幂等的。这里可能有人会说了,有的时候我请求同一个URL返回的可能是不一样的东西,就好比我首先发送请求是QQ头像原先请求到的是这个,后来我改头像,头像换了,但是这里的幂等指的就是请求的东西的性质是一样的,就是也没有那么严格,必须全部都是一样的,这里请求到的都是头像,所以可以理解的过去。
对于POST请求,我两次调用POST请求,可能就会在服务器创建两份资源,所以当然不是幂等的。就比如说我发帖子,评论一条,我再来一条,发送一模一样的请求,状态就会发生改变。
幂等的编程概念
对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么就称这个运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)=abs(abs(a))。
对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x,x) = x。
三、GET请求可以有请求体
其实在RFC文档中没有规定GET请求不可以发送请求体,只是一些工具或者类库做了限制,其实GET请求的请求体是可选的。