背景:
在HTTP中,安全指的是HTTP请求方法不会破坏服务器上的资源; 幂等指的是多次执行相同的操作,结果都是相同的。
GET请求是安全幂等的, 因为它是只读操作, 无论操作多少次, 服务器上的数据都是安全的, 并且每次的结果都是相同的;POST请求不是安全幂等的,因为它是新增或提交数据的操作, 会修改服务器上的资源, 所以是不安全的, 并且多次提交数据就会创建多个资源, 所以不是幂等的。
-
定义
GET请求是从服务器获取资源;POST请求是将数据提交到指定的资源,通常会造成服务器资源的修改。 -
应用场景
GET请求是一个幂等的请求,一般用于对服务器资源不会产生影响的场景,比如请求一个网页的资源;POST请求不是一个幂等的请求,一般用于对服务器资源会产生影响的情景,比如注册用户这一类的操作。 -
请求报文的请求体
GET请求报文中请求体为空;POST请求报文中请求体为向服务器提交的数据。 -
参数类型
GET请求的参数类型只接受ASCII字符;POST请求的参数类型支持更多的数据类型。 -
参数传递方式
GET请求的参数通过URL传递;POST请求的参数放在请求体中。 -
请求长度
由于浏览器对URL长度的限制,所以会影响GET请求发送数据时的请求长度;而POST请求没有请求长度限制。 -
是否缓存
因为两者应用场景不同,浏览器一般会对GET请求缓存;但很少对POST请求缓存。 -
安全性
GET请求可以将请求参数放入URL中向服务器发送;这样的做法相对于POST请求来说是不太安全的,因为请求的URL会被保留在历史记录中。