“ get ”安全,还是“ post ”安全?这或许是大家总结两者必须要分析的内容,因为这涉及到我们将内容从浏览器传送到服务器的安全性,选择不当将会带来巨大的不安全因素,从而可能带来巨大的损失。这篇博客,我将阐述一下,当然更多的还是希望各位大神发表一下见解,讨论一下下!
首先,我们来看一下两者最基本的区别:
- GET 请求通过 URL (请求行)提交数据,在 URL 中可以看到所传参数。 POST 通过“请求体”传递数据,参数不会在 url 中显示 GET 请求提交的数据有长度限制, POST 请求没有限制。 GET 请求返回的内容可以被浏览器缓存起来。而每次提交的 POST ,浏览器在你按下 F5 的时候会跳出确认框,浏览器不会缓存 POST 请求返回的内容。 GET 对数据进行查询, POST 主要对数据进行增删改!简单说, GET 是只读,POST 是写。
这是大家经常总结的两者之间的区别!前两天一位技术大牛给我讲解两者的安全性?大家看一下我们之间的对话:
大牛:你认为 get 和 post 两者谁更安全一些呢?
菜鸟(我):我认为 post , 更安全一些,因为 get 传输方式将在 URL 中显示参数,更容易引发一些“不怀好意”人的兴趣,例如上边出现了 username 和 userpwd 等特殊字符时,更容易给他们一些兴趣。虽然可以编码,当是也是可以解码的。而 post 则对方看不见,即使一些高手截获这些信息,也需要它筛选还有解码,相对来说比 get 方法更加安全。当然是没有绝对的安全的。
大牛: NO! 你只看了表面! HTTP 协议中提到 GET 是安全的方法( safe method),其意思是说 GET 方法不会改变服务器端数据,所以不会产生副作用。如果是该用POST 的地方用了 GET ,又说 GET 不安全,那 GET 也太冤枉了。也就是说,只要我们正确选择使用 GET 和 POST ,那么 GET 是安全的。
菜鸟(我):额……
此段对话到此结束,没有再争论下去。因为它拿出了 HTTP 协议,当做了论据,这是在 IT 界很权威的文档。我没有很充足的理由去辩论。当时我还是认为它的这个说法有点不合适。
在我认为,他把原因和结论弄反了。他的观点是:只要我们正确使用二者,因为GET 方法中不对数据进行修改,不传送一些保密的信息,而这些需要由 POST 来传输,所以说 GET 不存在安全问题,而需要注意的是 POST 传输的安全问题。
我看来,正确使用二者,怎么算 GET 和 POST 两者正确的选择来使用了。这些规矩或者规范,是怎么制定的呢?为什么说 get 不能传送加密信息和修改数据呢?原因还是说它没有 POST 安全,所以 HTTP 协议规定了它用来传输不重要的读操作,所以才不会因为它而产生安全问题。因为它传送的数据不值得别人去盗取,没有价值。
所以在我看来,还是 POST 这种方式,比 GET 更安全。既然是做比作,比作着来学习,我们就需要来让它们做相同的工作来看效果。总不能一个小孩儿跑 50 米比一个大人跑 100 米用的时间少,就说小孩儿的跑步速度比大人的快吧?
虽然争论这个没有太大的用处,没有太大的意义,但是还是想写写,想听听: 1,大家对“ POST 和 GET 安全”的看法, 2 ,对“讨论两者安全这件事”的看法, 3 ,对“如何对待学习知识的看法,是该囫囵吞枣,还是认真对待。那些该囫囵吞枣,那些该认真对待”的看法……