V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
situs
V2EX  ›  问与答

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

  •  
  •   situs · Sep 13, 2017 · 5341 views
    This topic created in 3156 days ago, the information mentioned may be changed or developed.

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

    dalao 能分享一下吗?

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


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

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

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

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

    ssl 下 2 者都安全

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

    但里面也能看出点端倪,比如你侧重说缓存,那么就可以继续聊一聊 http 缓存机制,运营商劫持,DNS 等。比如说安全,那就深入聊 web 安全。循序渐进嘛,不能一来就反转二叉树吧
    situs
        29
    situs  
    OP
       Sep 14, 2017
    @iyaozhen 这么多回复,只有您的是在回答我的主题~ 看来还得根据面试者的回答进行继续的深入呀。
    julyclyde
        30
    julyclyde  
       Sep 16, 2017
    (一般情况下)带不带 body
    可否缓存
    语义
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2630 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 159ms · UTC 11:10 · PVG 19:10 · LAX 04:10 · JFK 07:10
    ♥ Do have faith in what you're doing.