get 和 post 的区别

前言

参考博客:HTTP POST GET 本质区别详解

正文

一、原理区别

  • Http 定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET,POST,PUT,DELETE

  • URL 全称是资源描述符,我们可以这样认 为:一个 URL 地址,它用于描述一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查 ,改 ,增 ,删 4 个操作。到这里,大家应该有个大概的了解了,GET 一般用于获取/查询 资源信息,而 POST 一般用于更新 资源信息,从服务器的角度来说,GET 比 POST 更安全,因为 GET 不会修改服务器的数据!

  • 个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异

二、形式上的区别

其一:url 不同
  • GET 提交,请求的数据会附在 URL 之后(就是把数据放置在请求行(request line)中),以 ? 分割 URL 和传输数据,多个参数用 & 连接,Url 的编码格式采用的是 ASCII 码,而不是 Unicode ,这也就是说你不能在 Url 中包含任何非 ASCII 字符,所有非 ASCII 字符均需要编码再传输

  • POST提交:把提交的数据放置在是HTTP包的包体中

其二:传输数据大小不同

首先声明:HTTP 协议没有对传输的数据大小进行限制,HTTP 协议规范也没有对 URL 长度进行限制。

  • GET:特定浏览器和服务器对 URL 长度有限制,例如 IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于 GET 提交时,传输数据就会受到 URL 长度的限制

  • POST:由于不是通过 URL 传值,理论上数据不受限。但实际各个 WEB 服务器会规定对 post 提交数据大小进行限制,Apache、IIS6 都有各自的配置。

其三,相对安全性
  • POST 的安全性要比 GET 的安全性高。比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因为登录页面有可能被浏览器缓存, 其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了