GET 和 POST 有什么区别?

624 阅读2分钟

GET 和 POST 有什么区别?

GET 和 POST 有什么区别吗?详细介绍一下?


好的,面试官

其实 GET 请求和 POST 请求都是基于 TCP/IP 实现的,本质上没太大区别, 只是在实际开发的过程中,我们根据一定的规范约定俗成地给了它们不同的实现罢了。


根据 RFC 规范,它们有以下不同点:

  1. 语义不同,GET 的语义是从服务器获取指定的资源,而 POST 的语义是根据请求负荷(报文body)对指定的资源做出处理。
  2. 参数的位置不同,GET 请求的位置一般是放在 URL 的后面,而 POST 请求则是放在 Body 中
  3. 参数的大小不同,浏览器会对 URL 的长度做出限制,所以 GET 的参数是有限制的,而 POST 请求的参数是放在 Body 中,理论上没有限制;但是这也取决也不同的浏览器
  4. 在安全性和幂等性方面的考虑, 什么是安全?这里指的是不会对服务器资源造成破坏的 什么是幂等?这里指的是多次请求得到的结果是一样的 GET 的语义是从服务器获取指定的资源,是读请求;所以它不会对服务器资源造成破坏,并且多次请求的结果是一致的,所以 GET 请求是安全且幂等的;也正因为这样浏览器才可以对 GET 请求的数据进行缓存(书签) POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,是写请求,会更改服务器的资源,多次请求会创建多个资源,所以 POST 请求是不安全且不幂等的。

当然啦,上述的描述都是在 RFC 规范的前提下的,脱离了这个规范这个回答就不一定对了,哈哈哈哈 虽然说我们可以有自己的实现,但是呢,我们平时开发的时候最好还是按照约定俗成的来,不然可能会造成意想不到的后果, 比如说你把 GET 请求实现成了删除服务器资源,那么如果别人不知道你的这个实现,而想使用 GET 请求来读取你服务器的资源的时候,一不小心就把你服务器的资源给删了。