1. 区别

GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签 可收藏为书签 不可收藏为书签
缓存 会被浏览器自动缓存 不会被浏览器自动缓存,除非手动设置头部缓存标识(响应包含适当的Cache-ControlExpires头字段)
编码类型 只支持application/x-www-form-urlencoded编码 支持application/x-www-form-urlencodedmultipart/form-data等多种编码方式
历史 参数保留在浏览器历史中 参数不会保留在浏览器历史中
对数据长度的限制 当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL的最大长度是2048个字符) 无限制
对数据类型的限制 只接受ASCII字符 没有限制,也允许二进制数据
传输安全性 POST相比,GET的安全性较差,因为所发送的数据是URL的一部分,所以在发送密码或其他敏感信息时绝不要使用GET。并且GET方法更容易遭受CSRF攻击 POSTGET更安全,因为参数不会被保存在浏览器历史或web服务器日志中
可见性 数据在URL中对所有人都是可见的 数据不会显示在URL

2. POST 方法比 GET 方法安全?

HTTP协议里,所谓的“安全”是指请求方法不会对服务器上的资源进行修改,“破坏”服务器上的资源。

按照这种定义,GET请求方法是安全的,它对服务器资源执行的仅仅是只读操作,也是幂等的。

幂等指多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”。

POST请求方法是不安全的,它会修改服务器上的资源。在RFC里的语义,POST是指“新增或提交数据”,多次提交数据会创建多个资源,所以不是幂等的。

总结:

  • GET:安全,幂等
  • POST:不安全,不幂等

对于传输来说,GET的安全性比POST要差,但是GETPOST报文在传输上都是不安全的,因为HTTP在网络上是明文传输的,想要安全传输就得加密,也就是HTTPS