Http 中 get 和 post 的区别?

2018-01-21 20:33:46 +08:00
 okzpy9425

前几天去面试,被问道一个这样的问题。。 我回答的是主要区别是 一个是幂等的 一个不是。然后他说还有其他。我一时半会儿也没想出来。。然后就 GG 了。

7037 次点击
所在节点    HTTP
70 条回复
stcasshern
2018-01-22 13:49:48 +08:00
擦,get post 差别还挺大呀。包括 request head 以及 url 的样式、都有区别呀,幂等那个是 post 和 update 吧
xfriday
2018-01-22 13:50:41 +08:00
真的只有语义的区别,可以去看看 elasticsearch 的 api ...
jason19659
2018-01-22 13:59:25 +08:00
可能是问现实世界习惯用性法上的区别
qsnow6
2018-01-22 14:11:32 +08:00
让我想起那篇,Google spider 来爬 blog 的文章,结果爬完带个 blog 文章就消失了。

blog 经过排查发现,页面上有个删除按钮,是用 get 方式做的,而且没有权限验证。。
zhouyg
2018-01-22 14:52:09 +08:00
区别说大不大,说小也不小。作为开放题,肯定没有标准答案的,关键还是从问题中展现出自己的理解
tailf
2018-01-22 15:16:11 +08:00
在 HTTP 规范里面是没有区别的,但是成熟的开源 web server 实现是有区别的。

这个东西本身不复杂,这已经是最高级别的答案了。
robinlovemaggie
2018-01-22 15:39:57 +08:00
私以为这就好比旧时代的地主家的媳妇多了一样,两个了之后就分成了大房( post )二房( get )。大房能做的事情多一些(重量级),既要能生还要能管,二房相对少一些(轻量级),有时候就是个小玩具。
haohong725
2018-01-22 15:40:58 +08:00
相同点:都是发 tcp 协议包
不同点:post 发两次 tcp 包,get 发一次 tcp 包
hoythan
2018-01-22 15:44:26 +08:00
差别还是很大的,get 请求会被浏览器所缓存,api 接口一些不复杂的查询类可以尽量使用 get 方法。
scriptB0y
2018-01-22 15:59:27 +08:00
楼上很多人说的不同的确是存在的,但这好像说道“实现”上去了。撇开具体实现不说,单说 RFC 定义的 HTTP 方法,其实只有语义不同。
okzpy9425
2018-01-22 16:16:08 +08:00
@scriptB0y 我感觉也是这样。真正的区别是在语义上。 至于可不可以被缓存,发送几次包这些都是可以具体实现
tabris17
2018-01-22 16:19:52 +08:00
@brickyang 记得当年喷过这篇文章
tabris17
2018-01-22 16:24:33 +08:00
@sujin190 发几次包和客户端实现有关,不是协议要求。
tailf
2018-01-22 16:32:45 +08:00
tcp 是流协议,请不要再说包了。。。
fcten
2018-01-22 16:36:10 +08:00
协议上只规定了两者有不同的用途,剩下都是客户端与服务端实现上的差别
clino
2018-01-22 16:41:19 +08:00
@okzpy9425 #10 知乎这篇哪个地方是错的?
0ZXYDDu796nVCFxq
2018-01-22 16:42:11 +08:00
如果是 Web 相关的岗位,面试官问这个问题,必定是想知道应聘者对具体的工程实现上的经验
而且这些经验和知识对开发有非常大的影响,可以具体到常见的应用场景、浏览器行为等,想展示自己基础知识好,可以聊点 RFC 的东西
何必形而上的硬要往四层上扯说没区别呢

那你们面试是不是这么回答的:
OOP 和面向过程有什么区别?
没区别,在 CPU 看来都是 0 和 1

C 和 Java 有什么区别?
没区别,在 CPU 看来都是 0 和 1

TCP 和 UDP 有什么不同?
在链路层看来,没区别
okzpy9425
2018-01-22 16:53:56 +08:00
@gstqc 说的不错。
okzpy9425
2018-01-22 16:54:48 +08:00
@gstqc 可能就是把问题想复杂了。。直接说什么时候用 get 什么时候用 post 会好很多
zxybird
2018-01-22 17:02:43 +08:00
感觉最大的区别,就是语义的区别吧。毕竟 HTTP 是一个协议,它关心的只是语义层面。其它的区别,就是各个浏览器、服务器、面试官强加的吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX