当前位置:网站首页>面试突击71:GET 和 POST 有什么区别?
面试突击71:GET 和 POST 有什么区别?
2022-08-03 11:31:00 【王磊】
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面试真题解析
边栏推荐
- 字节最爱问的智力题,你会几道?
- Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
- 使用.NET简单实现一个Redis的高性能克隆版(一)
- 小身材有大作用——光模块寿命分析(二)
- 2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
- 通过组策略安装软件和删除用户配置文件
- Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)
- Machines need tokens more than people
- Cookie and Session usage
- MySQL - 2059 - Authentication plugin ‘caching_sha2_password‘ cannot be loaded
猜你喜欢
【一起学Rust】Rust学习前准备——注释和格式化输出
![[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比](/img/48/8d2cdf33862dc4622230c69d381b82.png)
[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比

For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received

实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣

本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
![[Detailed explanation of binary search plus recursive writing method] with all the code](/img/51/c4960575a59f8ca7f161b310e47b27.png)
[Detailed explanation of binary search plus recursive writing method] with all the code

Programmers architecture practice way: software architecture basic concepts and thinking

记住用户名案例(js)

MySQL database combat (1)

The way of programmer architecture practice: how to design a sustainable evolution system architecture?
随机推荐
【二分查找详解外加递归写法】附有全部代码
LeetCode-142. 环形链表 II
VRRP协议的作用及VRRP+OSPF配置方法
[Wrong title] Circuit maintenance
The way of programmer architecture practice: how to design a sustainable evolution system architecture?
thymeleaf中的日期格式转化
SmobilerService 推送实现
【倒计时5天】探索音画质量提升背后的秘密,千元大礼等你来拿
字符串本地化和消息字典(二)
数据库一席谈:打造开源的数据生态,支撑产业数字化浪潮
Dva.js 新手入门指南
[Output each bit of an integer, from high to low.With and without recursion]
Simple implementation of a high-performance clone of Redis using .NET (1)
浅谈SVN备份
SmobilerService 推送实现
【MySQL功法】第5话 · SQL单表查询
性能优化|从ping延时看CPU电源管理
LeetCode-1796. 字符串中第二大的数字
asdn涨薪技术之apifox+Jenkins如何玩转接口自动化测试
LP流动性挖矿DAPP系统开发丨流动性挖矿功能原理及说明