当你问到 GET 和 POST 的区别的时候,想听到什么样的答案?

2017-09-13 11:24:39 +08:00
 situs

面试中经常会有“看起来”很简单的问题,rt 就是其一,再比如“从地址栏输入 url 到页面展示经历了什么”。 这类的问题,要说,都能列举一二,但不知道作为面试官的您最想听到的是哪方面的答案??

dalao 能分享一下吗?

4655 次点击
所在节点    问与答
30 条回复
songdezu
2017-09-13 19:45:44 +08:00
安全性没区别吧,post 不能缓存
hxsf
2017-09-13 21:27:27 +08:00
GET 方法 语义上来说指获取由 URI 标识的任何信息。是幂等的(重要)

1. 如果请求消息包含 IfModified-Since、If-Unmodified-Since、If-Match、If-None-Match 或 If-Range header 字段则 GET 方法的语义将变为 “条件 GET ”。一个条件 GET 方法请求满足描述的情况下
的资源。(通过允许缓存被刷新而不需要多个请求或传输客户端已经有的数据,来减少不必要的网络使用)
2. 如果请求消息包含 Range 头,则 GET 方法的语义将变为“部分 GET ”。
部分 GET 请求仅传输实体的一部分,(还是为了减少不必要的网络使用)

POST 方法 语义上来说是指新增或修改(取决于你的服务器代码)不一定是幂等的(重要)

1. 除非注明了 Cache-Control 或者 Expires,否则不应该被缓存。
2. message-body 不会被忽略, ( GET 也可以加 message-body,不过会被忽略掉(当然,你可以自己写个不遵循 rfc 的 server,但是连路中间的缓存或者代理啥的,嘿嘿))
hxsf
2017-09-13 21:30:56 +08:00
@songdezu #21 前半句见 v 友帖子 “被谷歌爬虫删了所有博客”,

后半句,参考 rfc 的缓存规则,post 请求的响应如果注明了 Cache-Control 之类的,是有用的。 当然,中间的 Cache、Proxy 的实现有没有遵循 rfc 就是另外一回事了。。。
lzjamao
2017-09-13 21:36:23 +08:00
* 协议格式的区别
* 服务器响应的区别
weakish
2017-09-13 22:05:38 +08:00
语义上说幂等性。

不过这只是一个约定。实际上,如果服务器乱来,GET 完全可以不幂等。
实际的区别可能是用 GET 发送数据的话,
由于浏览器和服务器通常对 url 长度有限制,
因此 GET 发送的数据量上限比 POST 要低很多。
但实际上 HTTP 协议并没有指定 url 长度,所以完全可以开发支持「无限」长度的 url 的 http 客户端和服务器。
msg7086
2017-09-14 00:09:37 +08:00
GET 和 POST 本质区别还是 HTTP VERB 不同。
Post 的时候也可以在 URL 上带参数。
Post 的时候也可以不带 Request Body。
Get 的时候也可以带上 Request Body,只不过按照规范来说,不推荐服务端去根据 Request Body 的内容来改变输出。

@hxsf 被删了博客那不是 Get 的锅,而是权限控制的锅。
做成 Post 就算谷歌不能删,路人一样能删,反而安全性下降了。
orFish
2017-09-14 00:25:58 +08:00
POST 是幂等的。

ssl 下 2 者都安全

Get 也可以带 body
iyaozhen
2017-09-14 01:06:12 +08:00
我也经常问这个问题,其实也没什么目的。相当于开场白吧,你说的时候可能面试官说不定在疯狂填上一个人的面试记录呢。

但里面也能看出点端倪,比如你侧重说缓存,那么就可以继续聊一聊 http 缓存机制,运营商劫持,DNS 等。比如说安全,那就深入聊 web 安全。循序渐进嘛,不能一来就反转二叉树吧
situs
2017-09-14 09:29:59 +08:00
@iyaozhen 这么多回复,只有您的是在回答我的主题~ 看来还得根据面试者的回答进行继续的深入呀。
julyclyde
2017-09-16 23:17:39 +08:00
(一般情况下)带不带 body
可否缓存
语义

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

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

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

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

© 2021 V2EX