当你问到 GET 和 POST 的区别的时候,想听到什么样的答案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
situs
V2EX    问与答

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

  •  
  •   situs 2017-09-13 11:24:39 +08:00 4992 次点击
    这是一个创建于 2952 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    dalao 能分享一下吗?

    30 条回复    2017-09-16 23:17:39 +08:00
    doublleft
        1
    doublleft  
       2017-09-13 11:44:12 +08:00
    我一般会从语义化开始讲,列举几个为什么用 POST/GET 的场景,延伸到区别,再回归到本质都一样
    doublleft
        2
    doublleft  
       2017-09-13 11:45:00 +08:00
    再扯扯跨域,OPTIONS 请求,资源引用和 xhr 请求区别,聊聊 JSONP ……
    Moker
        3
    Moker  
       2017-09-13 11:45:27 +08:00
    这两个请求的具体请求参数存放在哪里?有长度限制么?如果有,分别是多少?
    楼下接着补充
    Ryans
        4
    Ryans  
       2017-09-13 11:47:06 +08:00
    页面资源幂等性
    GET 参数在 URL 传递会暴露
    什么场合不建议 GET


    我乱说的
    GG668v26Fd55CP5W
        5
    GG668v26Fd55CP5W  
       2017-09-13 11:50:24 +08:00 via iPhone
    正确 /不正确使用的场景和 why?
    SuperMild
        6
    SuperMild  
       2017-09-13 11:58:12 +08:00
    然而面试官又各不一样,有的人可能喜欢听最基本的解释,确认你理解没有错误,而有的人可能喜欢听新奇的答案,看你能不能玩出新花样。
    oott123
        7
    oott123  
       2017-09-13 12:07:11 +08:00 via Android
    有个十分扯淡,但很多面试官喜欢听的答案:「 POST 比 GET 更安全」么
    tomczhen
        8
    tomczhen  
       2017-09-13 12:12:46 +08:00 via Android
    对于服务端和中间人来说没有区别,所谓的 URL 在地址栏这是客户端自己的实现,跟 HTTP 协议无关。
    URL 长度 HTTP 协议中也没有规定,但是受客户端和服务端实现影响,不同的应用可能限制不同,或者可以配置范围不同。
    situs
        9
    situs  
    OP
       2017-09-13 13:29:51 +08:00
    @SuperMild 这倒是,面试这种很主观的东西确实是没有统一的答案。
    DCjanus
        10
    DCjanus  
       2017-09-13 13:33:20 +08:00
    在中国的网络环境下,部分运营商会缓存 GET 请求,所以如果你不是用 HTTPS,那么用 POST 则好得多
    虽然某运营商也缓存过 POST
    a87150
        11
    a87150  
       2017-09-13 13:39:08 +08:00
    这种基础问题最考验水平
    nekoyaki
        12
    nekoyaki  
       2017-09-13 14:04:02 +08:00
    @a87150
    也挺考验面试官水平……我觉得可能一般面试官都未必有正确的理解
    qooweds
        13
    qooweds  
       2017-09-13 18:39:48 +08:00
    那么最正确的答案到底是什么?我也搜过类似问题,已经被搞蒙了
    codermagefox
        14
    codermagefox  
       2017-09-13 19:12:37 +08:00
    萌新表示看了楼上的回复最喜欢 4L 的回答,mark 一下
    wangdu2012
        15
    wangdu2012  
       2017-09-13 19:21:52 +08:00 via iPhone
    招前端这么问?
    isCyan
        16
    isCyan  
       2017-09-13 19:23:28 +08:00 via Android
    本质区别:一个在 uri 里一个在 body 里
    yemoluo
        17
    yemoluo  
       2017-09-13 19:33:12 +08:00
    @isCyan 这不是最本质的区别
    misaka20038numbe
        18
    misaka20038numbe  
       2017-09-13 19:37:11 +08:00   1
    GET 发送请求,POST 发送数据
    lxml
        19
    lxml  
       2017-09-13 19:40:49 +08:00
    @isCyan #16 本质上没啥区别,就是贴标签而已,Get 也可以塞 Body 里
    akira
        20
    akira  
       2017-09-13 19:42:46 +08:00   1
    最最本质的区别
    一个请求方法是"GET"
    一个请求方法是"POST"
    songdezu
        21
    songdezu  
       2017-09-13 19:45:44 +08:00 via iPhone
    安全性没区别吧,post 不能缓存
    hxsf
        22
    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
        23
    hxsf  
       2017-09-13 21:30:56 +08:00
    @songdezu #21 前半句见 v 友帖子 “被谷歌爬虫删了所有博客”,

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

    不过这只是一个约定。实际上,如果服务器乱来,GET 完全可以不幂等。
    实际的区别可能是用 GET 发送数据的话,
    由于浏览器和服务器通常对 url 长度有限制,
    因此 GET 发送的数据量上限比 POST 要低很多。
    但实际上 HTTP 协议并没有指定 url 长度,所以完全可以开发支持「无限」长度的 url 的 http 客户端和服务器。
    msg7086
        26
    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
        27
    orFish  
       2017-09-14 00:25:58 +08:00
    POST 是幂等的。

    ssl 下 2 者都安全

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

    但里面也能看出点端倪,比如你侧重说缓存,那么就可以继续聊一聊 http 缓存机制,运营商劫持,DNS 等。比如说安全,那就深入聊 web 安全。循序渐进嘛,不能一来就反转二叉树吧
    situs
        29
    situs  
    OP
       2017-09-14 09:29:59 +08:00
    @iyaozhen 这么多回复,只有您的是在回答我的主题~ 看来还得根据面试者的回答进行继续的深入呀。
    julyclyde
        30
    julyclyde  
       2017-09-16 23:17:39 +08:00
    (一般情况下)带不带 body
    可否缓存
    语义
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     983 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:30 PVG 06:30 LAX 15:30 JFK 18:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86