GET和POST区别

一、GET和POST有什么区别?

​ 根据RFC,GET的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片和视频等。GET请求的参数位置一般出现在URL中,且只支持ASCII,浏览器会对URL长度做出限制,(HTTP协议本身并没有对URL长度做出任何规定)。

​ 例如:打开www.baidu.com,浏览器就会发送GET请求给服务器,服务器就会返回该页面的所有文字及页面。

12-Get请求

​ 根据 RFC 规范,POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

​ 例如:打开一个网站的注册页面,填写账号与密码完毕后,提交,浏览器就会执行一次POST请求,把你的信息放入报文body里,然后拼接好POST请求头,发送给服务器。

POST 请求

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

​ 先大概说一下安全和幂等的概念:

  • 在HTTP协议里,安全是指请求不会破坏服务器资源。
  • 幂等则是指多次执行相同的操作,产生的结果都是一样的。

​ 从RFC规范来看:

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

三、HTTP的优缺点?

1.优点:

  • 简单,HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛。
  • 灵活和易于拓展,HTTP 协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充
  • 应用广泛和跨平台,互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用遍地开花,同时天然具有跨平台的优越性。

2.缺点:

  • 无状态的双刃剑,无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。

    Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

    相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了了

    Cookie 技术

  • 明文传输双刃剑,明文意味着在传输过程中的信息,是可方便阅读的,比如 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。

    但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那你号没了

  • 不安全,HTTP 比较严重的缺点就是不安全:

    • 通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
    • 不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
    • 无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

    HTTP 的安全问题,可以用 HTTPS 的方式解决,也就是通过引入 SSL/TLS 层,使得在安全上达到了极致。

posted @ 2023-10-25 19:18  桂洛克船长  阅读(15)  评论(0编辑  收藏  举报