网上涉及到 GET 和 POST 的讨论大多都是对比他们的区别, 而这些对比区别的文章之间又不断地打脸, 总之就是我说你是错的,他又说我是错的, 另一个跑过来又说他是错的. 看着真的是心累. 像我这种半路出家, 又是初涉前端的新人, 暂且不去讨论这两者之间原理如何如何, 总之现在能达成一致的观点是: 这两者的本质是一样的.

现在抛开那些东西不谈, 我就单单来谈谈 GET 和 POST 在语义和应用场景方面我的理解. 单单从语义上来讲, 能很容易理解 GET 和 POST 之间的区别. 很多刚接触前端的新人一开始接触这两个请求的时候可能第一直觉就是 GET 是用来获取数据的, POST 是用来发送数据的. 到后来他们可能才会知道原来 GET 是可以发送数据的, POST 也是可以单单来获取数据的.

虽然这两者到可以用来获取/发送数据, 但是在实际场景中, 还是要按需来使用比较合适的请求方式. 比如你要分享一片文章给朋友, 那么在文章的地址中就必须带有这篇文章的一些信息, 比如文章的 ID . 当你想分享一个带有搜索条件的页面时, 那么页面的地址中也必须包含又相应的搜索信息, 不然对方打开的是一个不带任何参数的url, 那对方怎么知道你在当时选中的文章或搜索条件是什么呢? 所以这种场景下, 用 GET 就比 POST 更加符合我们实际的应用场景. 而如果你发表了一片文章, 那么 GET 提交就不是太合适了, 因为 url 是有长度限制的, 虽然各家浏览器对 url 对长度的限制各不相同, 但是开发者又如何知道用户用什么浏览器来访问呢. 所以这种情况下, POST 明显比 GET 更加适合.

所以我觉得下面这些最最表面的区别从使用场景的角度来说并没有错, 因为这些的的确确是在实际的使用场景中能直观感受到的区别

1.GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

2.GET书签可收藏,POST为书签不可收藏。GET能被缓存,POST不能缓存 。

3.GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。

4.GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

5.GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

而要往深了说的话,这些答案就给人一种答非所问的感觉了.

所以,在问这个问题的时候最好也带上一些” GET 参数”, 比如: “ GET 和 POST 在使用场景下有什么区别?”; 再如: “ GET 和 POST 本质上有什么区别?”