你真的了解 get 和 post 的区别么
get 和 post 是两种最常用的 HTTP 请求方法,要说它们两个的区别,相必接触过 WEB 开发的人都能够说出一二。
如果我问你这个问题,你的内心充满了自信和喜悦。你可能已经写过无数个 GET 和 POST 请求,也可能看过很多“权威网站”总结出的他们的区别,你非常清楚知道什么时候该用什么。
于是你在心里默念...
从本质上来说,get 是向服务器请求数据,而 post 是向服务器提交要被处理的数据。
最直观的区别是 get 的请求参数是在 url 中发送的,而 post 的请求参数是在 HTTP 消息主体中发送的。
然后你轻轻松松、潇潇洒洒的给出了一个“标准答案”:
标准答案
- get 在回退和刷新时是无害的,post 的数据会被重新提交。
- get 的参数可以被书签和历史记录保存,post 的参数不能被书签和历史记录保存。
- get 只支持 url 分割(application/x-www-form-urlencoded)的格式,post 支持多种编码格式,如:url 分割、FormData、text/plain、json 等。
- get 在 url 中添加的参数有长度限制,post 的参数长度没有限制。
- get 只允许 ASCII 字符的数据类型,post 没有数据类型的限制。
- get 相对 post 来说安全性较差,因为 get 的参数直接在 url 中对所有人可见。因此不要在发送密码或其他敏感信息时使用 get 方法。
以上标准答案来自于:w3school
get 和 post 本质上没有区别
很遗憾,这并不是我期待的答案!如果我告诉你 get 和 post 本质上没有区别 ,你信么?
要想说清楚这个问题,我们就要先回到一切开始的地方。
get 和 post 是什么?get 和 post 是两种最常用的 HTTP 请求方法。
那么 HTTP 又是什么?HTTP 是基于 TCP/IP 进行客户端和服务器之间通信的超文本传输协议。
HTTP 的底层是 TCP/IP 。所以 GET 和 POST 的底层也是 TCP/IP ,也就是说,GET/POST 都是TCP链接。GET 和 POST 能做的事情是一样一样的。你把 GET 参数加到 HTTP 消息主体中,或者给 POST 带上 url 参数,技术上是完全行的通的。
get 和 post 的区别是怎么来的
看到这里你又会问了,既然没有区别,那么上面的“标准答案”又是怎么回事?
注意,并没有人说“标准答案”有误。只是上边的区别是依赖于浏览器/服务器而存在的。
数据传输就相当于货物运输,装货和卸货就相当于数据的发送和接收。如果运输公司(浏览器和服务器)不对货物运输进行规范,任由他们无限的堆积货物、随意的隐秘货品。那么势必会对运输公司造成负担,产生很大额外的经济成本。所以他们就协商了一套业内规范(HTTP 协议),不同的货物用不同的装载方式(不同的请求方法),装载货物的多少也进行了限制(浏览器一般限制 url 长度在 2K 内,服务器最多处理 64K 大小的 url)。
所以看到这里你应该明白了吧。GET 和 POST 本质上都是 TCP 链接,并无差别。由于 HTTP 的规范和浏览器/服务器的限制,才导致他们在浏览器的实际应用过程中体现出一些不同。
看到这里也就结束了。现在,当其他人再问你 get 和 post 的区别,你终于可以安安稳稳的装 13 了。
参考
- 99%的人都理解错了HTTP中GET与POST的区别:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd
- W3School:HTTP 方法:GET 对比 POST:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
你真的了解 get 和 post 的区别么的更多相关文章
- 你真的了解word-wrap和word-break的区别吗?
这两个东西是什么,我相信至今还有很多人搞不清,只会死记硬背的写一个word-wrap:break-word;word-break:break-all;这样的东西来强制断句,又或者是因为这两个东西实在是 ...
- 你真的了解word-wrap和word-break的区别吗? (转载)
这两个东西是什么,我相信至今还有很多人搞不清,只会死记硬背的写一个word-wrap:break-word;word-break:break-all;这样的东西来强制断句,又或者是因为这两个东西实在是 ...
- 你真的知道em和rem的区别吗?
前言 em 和 rem 都是相对单位,在使用时由浏览器转换为像素值,具体取决于您的设计中的字体大小设置. 如果你使用值 1em 或 1rem,它可以被浏览器解析成 从16px 到 160px 或其他任 ...
- 【转】你真的了解word-wrap和word-break的区别吗?
原文在这里: http://www.cnblogs.com/2050/archive/2012/08/10/2632256.html
- 你真的了解MyBatis中${}和#{}的区别吗?
动态sql是mybatis的主要特性之一.在mapper中定义的参数传到xml中之后,在查询之前mybatis会对其进行动态解析. mybatis提供了两种支持动态sql的语法:#{} 和 ${}. ...
- python2和3在处理字符串上的区别
python2和3在处理字符串上的区别 python2和python3对于字符串的处理有很大的区别 熟悉了python2的写法用python3时真的会遇到很多问题啊…… 区别 python2中有一 ...
- 【.Net底层剖析】3.用IL来理解属性
.Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 未完待 ...
- 越狱Season 1-Episode 4: Cute Poison
Season 1, Episode 4: Cute Poison [Previously on Prison Break] previously: 以前地 前情提要 -Burrows: I didn' ...
- 英文长单词断行 word-break VS word-wrap
你真的了解word-wrap和word-break的区别吗? 这两个东西是什么,我相信至今还有很多人搞不清,只会死记硬背的写一个word-wrap:break-word;word-break:brea ...
随机推荐
- Nginx实现JWT验证-基于OpenResty实现
介绍 权限认证是接口开发中不可避免的问题,权限认证包括两个方面 接口需要知道调用的用户是谁 接口需要知道该用户是否有权限调用 第1个问题偏向于架构,第2个问题更偏向于业务,因此考虑在架构层解决第1个问 ...
- 如何系统地学习Excel?
人在江湖,生不由己.人在职场,Excel必备. 为了帮助更多人快速掌握职场必备技能Excel,我写了一个免费的教程<职场Excel>,能帮助你解决99%职场中遇到的问题. 对,你没看错,是 ...
- Django开发之Ajax 返回内容报错
预期效果 Django通过Ajax POST提交数据,前台弹窗处理结果 粗略代码 # views.py 代码 ...省略... msg = { 'code': 200, 'message': 'Hel ...
- Fortify Audit Workbench 笔记 Path Manipulation
Path Manipulation Abstract 通过用户输入控制 file system 操作所用的路径,借此攻击者可以访问或修改其他受保护的系统资源. Explanation 当满足以下两个条 ...
- Python程序设计pdf|网盘下载内附提取码
点击此处下载提取码:5o7z 本书提出了以理解和运用计算生态为目标的Python语言教学思想,不仅系统讲解了Python语言语法,同时介绍了从数据理解到图像处理的14个Python函数库,向初学Pyt ...
- 如果你大学上过编程课,一定被老师提醒过:不要使用 goto 语句!
如果你上过编程课,一定被老师提醒过:不要使用goto语句! 因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患. 但是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯 ...
- 4.26 省选模拟赛 T3 状压dp 差分求答案
LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...
- bzoj 1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 最大流+二分
题目要求所有牛都去避雨的最长时间最小. 显然需要二分 二分之后考虑如何判定. 显然每头牛都可以去某个地方 但是前提是最短路径<=mid. 依靠二分出来的东西建图.可以发现这是一个匹配问题 din ...
- Netty(一):server启动流程解析
netty作为一个被广泛应用的通信框架,有必要我们多了解一点. 实际上netty的几个重要的技术亮点: 1. reactor的线程模型; 2. 安全有效的nio非阻塞io模型应用; 3. pipeli ...
- 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚
还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...