HTTP中GET和POST

GET:

从它的语义出发,GET是从服务器获取指定的资源,资源包括静态文本,页面,图片,视频等。

GET的请求参数一般都在url中,url规定只能支持ASCII,所以GET请求的参数也只允许ASCII字符,而且,浏览器对于url的长度是有限制的,(但注意:HTTP协议本身对URL长度并没有做任何规定)

POST:

从它的语义出发,POST是根据请求符合(报文body)对指定的资源做处理。根据不同的资源类型,其处理方式也会有所不同。POST请求携带的资源数据一般是写在报文body中的,不在URL中,body中的数据可以为任意格式,只要你客户端跟服务端协商好就行,并且,浏览器并不会对body的大小做限制。

因此提出一个疑问?

GET和POST方法都是安全跟幂等的吗?

首先,什么是安全跟幂等?

所谓安全:在HTTP协议中,【安全】是指不会【破坏】服务器上的资源

所谓幂等:执行多次相同的操作,其结果是【相同】的。

GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。

所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签

做个简要的小结。

GET 的语义是请求获取指定的资源。GET 方法是安全、幂等、可被缓存的。

POST 的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 不安全,不幂等,(大部分实现)不可缓存。

注意, 上面是从 RFC 规范定义的语义来分析的。

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

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

注意:

如果「安全」放入概念是指信息是否会被泄漏的话,虽然 POST 用 body 传输数据,而 GET 用 URL 传输,这样数据会在浏览器地址拦容易看到,但是并不能说 GET 不如 POST 安全的。

因为 HTTP 传输的内容都是明文的,虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。(只是说从url上看不到post提交的body而已)

所以,要避免传输过程中数据被窃取,就要使用 HTTPS 协议,这样所有 HTTP 的数据都会被加密传输。

上述所说的GET和POST都是基于RFC规范,貌似现在有个RPC规范

那么,何为RPC规范呢?

RPC (Remote Procedure Call, 远程过程调用或者远程服务调用)

RPC是什么?_一台机器调用另一台机器的结果-CSDN博客RPC规范&接口实现模块Flask-JSONRPC_c# jsonrpc 规范-CSDN博客

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值