网站首页 > 技术文章 正文
http中 GET 和 POST到底有什么区别?
记得 Python大星早年面试的时候,会碰到面试官抛出这种问题。那么,为什么面试官会问这种看似很简单的问题呢?现在不知道还有没有面试官问这种问题,如果碰到了,评论下欢迎你的留言。
先讲一个故事:
这是发生在前后端联调的真实故事(情节“美化”,自行脑补)。
前端索隆:喂,你这接口返回没数据?坑货。。。
后端山治:绿藻头,我这 postman 返回数据没问题,你用你眼珠子看下截图。
前端索隆:臭厨师,你看我这截图?请求参数和你这一样,就是没有数据。
后端山治:这个接口需要登录才能调用,你 header 里传 token 了没有?
前端索隆:文档也不写清楚,谁知道啊!!!
... 5 分钟过去了
前端索隆:我去,你这白痴卷眉,获取分页 list ,你用啥 POST 干毛线!GET 请求啊!
后端山治:你个路痴,GET 调不通,你不会改用 POST 啊,你用 POST 会死啊!
...
聊聊 http 中 GET 和 POST 到底有什么区别?
先谈下两者的共同点,GET、POST请求都是 http 请求方式,用户通过不同的 http 的请求方式完成对资源(url)的操作。
GET、POST、PUT 和 DELETE 就对应着对这个资源的查,改,增,删 4个操作。具体来说,GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息。
① GET 请求提交的数据会在地址栏显示出来,而 POST 请求不会在地址栏显示出来。
GET 提交:
请求的数据会附在 url 之后(就是把数据放在 HTTP 协议头中),以 ?分割 url 和 传输数据,多个参数用 & 连接;
POST 提交:
把提交的数据放置在是 HTTP 包的包体中。
因此,GET 提交的数据会在地址栏中显示出来,而 POST 提交,地址栏不会改变。
② 传输数据
GET 请求:
浏览器对于地址长度的限制会导致传输的数据有限制,只允许 ASCII 字符,如果请求参数不是 ASCII 字符,会先转化。
POST 请求:
请求不会因为地址长度限制而导致传输数据限制。限制它的是服务器的处理能力、存储大小和 Web 容器的限制,比 如 Tomcat 默认是 2 MB。没有限制。也允许二进制数据。
③ 安全性
POST 的安全性要比 GET 的安全性高。
GET 请求返回的内容可以被浏览器缓存起来。而每次提交的 POST,浏览器不会缓存 POST 请求返回的内容。
比如说 GET http://localhost/api.do
当你再次发送该请求的时候,浏览器并不真的再发送这条请求,而是从历史记录里把这个数据读取取出来,这叫做缓存。这是浏览器自己的决策,后端并不知道也没有收到任何请求。
防止缓存,我们可以看到一些前端人员通常在请求时要加一个时间戳
GET http://localhost/api.do?_t=时间戳
添加一个后端直接忽略的参数,然后每次都不一样,这样浏览器就认为每次都是不同的请求,就不会从历史记录里读取数据了。
Python 中如何使用 requests 发起 GET 和 POST 请求?
可以看 Python 大星历史文章
>>>趣说Python爬虫02--requests库基本使用
关于“http中 GET 和 POST到底有什么区别?”
如果你还有其他观点,欢迎评论下留言分享。@Python大星
猜你喜欢
- 2024-11-06 JavaScript学习笔记(二十五)——HTTP
- 2024-11-06 原生js实现文件下载并设置请求头header
- 2024-11-06 干货-Http请求get、post工具类(get和post请求的区别是什么)
- 2024-11-06 聊聊在springcloud gateway如何获取请求体
- 2024-11-06 python接口自动化-发送get请求(python get请求 url传参)
- 2024-11-06 想测试HTTP响应不知道如何开展怎么办?
- 2024-11-06 接口测试遇到500报错?别慌,你的头部可能有点问题
- 2024-11-06 一文讲清HPP的请求方法和过程(hp partsufer)
- 2024-11-06 HTTP请求对象(获取用户请求信息)(如何查看http请求的头部信息)
- 2024-11-06 学习笔记-HTTP 请求方法详解(学习笔记-HTTP 请求方法详解pdf)
- 1507℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 506℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 486℃MySQL service启动脚本浅析(r12笔记第59天)
- 466℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 464℃启用MySQL查询缓存(mysql8.0查询缓存)
- 444℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 423℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 419℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)