HTTP中的GET和POST请求方法

本文主要介绍两个部分:

        1、GET和POST请求的区别。

        2、GET和POST的安全、幂等性。

 一:GET和POST请求的区别。

 GET和POST都是HTTP协议中用来请求获取资源的方法,但是在RFC规范中中对GET和POST的定义是不同的。

  • GET 的定义:是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。
  • POST 的定义:是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。 

区别:

GET:请求只能写在URL的参数中,且规定了URL只能是 ASCll 格式。所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(但HTTP协议本身对 URL长度并没有做任何规定) 。

POST:请求携带数据的位置一般写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制

 二、GET和POST的安全、幂等性。

我们先了解安全和幂等的概念是什么。

  • 在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源
  • 所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的

 如果从RFC官方规定里面看

  • GET 方法就是安全且幂等的,因为它是「只读」操作,RFC认为GET是不携带需要无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签
  • POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签

但是实际过程中,开发者不一定会按照 RFC 规范定义的语义来实现 GET 和 POST 方法。比如:

  • 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
  • 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。

 1、GET可以携带body吗?

RFC 规范并没有规定 GET 请求不能带 body 的。理论上,任何请求都可以带 body 的。只是因为 RFC 规范定义的 GET 请求是获取资源,所以根据这个语义不需要用到 body。

另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值