GET 和 POST 是 HTTP 申请中最罕用的两种申请办法,在日常开发的 RESTful 接口中,都能看到它们的身影。而它们之间的区别,也是一道常见且经典的面试题,所以咱们本文就来具体的聊聊。
HTTP 协定定义的办法类型总共有以下 10 种:
PS:目前大部分的网站应用的都是 HTTP 1.1 的协定。
但在日常开发中,应用频率最高的就属 GET 申请和 POST 申请了,尤其是在中、小型公司,根本只会应用这两种申请来实现一个我的项目。
1. 相同点和最实质的区别
1.1 相同点
GET 申请和 POST 申请底层都是基于 TCP/IP 协定实现的,应用二者中的任意一个,都能够实现客户端和服务器端的双向交互。
1.2 最实质的区别
GET 和 POST 最实质的区别是“约定和标准”上的区别,在标准中,定义 GET 申请是用来获取资源的,也就是进行查问操作的,而 POST 申请是用来传输实体对象的,因而会应用 POST 来进行增加、批改和删除等操作 。
当然如果严格依照标准来说,删除操作应该应用 DELETE 申请才对,但在理论开发中,应用 POST 来进行删除的用法更常见一些。
依照约定来说,GET 和 POST 的参数传递也是不同的,GET 申请是将参数拼加到 URL 上进行参数传递的,而 POST 是将请参数写入到申请注释中传递的,如下图所示:
2. 非本质区别
2.1 缓存不同
GET 申请个别会被缓存,比方常见的 CSS、JS、HTML 申请等都会被缓存;而 POST 申请默认是不进行缓存的。
2.2 参数长度限度不同
GET 申请的参数是通过 URL 传递的,而 URL 的长度是有限度的,通常为 2k,当然浏览器厂商不同、版本不同这个限度的大小值可能也不同,但雷同的是它们都会对 URL 的大小进行限度;而 POST 申请参数是寄存在申请注释(request body)中的,所以没有大小限度。
2.3 回退和刷新不同
GET 申请能够间接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 申请如果间接回滚和刷新将会把数据再次提交,如下图所示:
2.4 历史记录不同
GET 申请的参数会保留在历史记录中,而 POST 申请的参数不会保留到历史记录中。
2.5 书签不同
GET 申请的地址可被珍藏为书签,而 POST 申请的地址不能被珍藏为书签。
总结
GET 和 POST 是 HTTP 申请中最罕用的两种申请办法,它们的底层都是基于 TCP/IP 实现的。它们的区别次要体现在 5 个方面:缓存不同、参数长度限度不同、回退和刷新不同、历史记录不同、是否保留为书签不同,但它们最大的区别是标准和约定上的不同,标准中定义 GET 是用来获取信息的,而 POST 是用来传递实体的,并且 GET 申请的参数要放在 URL 上,而 POST 申请的参数要放在申请注释中。
参考 & 鸣谢
www.w3school.com.cn/tags/html_ref_httpmethods.asp
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java 面试真题解析
面试合集:https://gitee.com/mydb/interview