Sunday面试指南

GET 和 POST 有什么区别?安全性、幂等性和参数位置该怎么理解?

🧑‍💻 面试官:GET 和 POST 的区别是什么?

🙋‍♂️ 我:GET 参数在 URL,POST 参数在请求体,所以 POST 更安全。

🧑‍💻 面试官:POST 能不能带查询参数?HTTPS 下 URL 和请求体在链路上有什么差别?

🙋‍♂️ 我:POST 也能带查询参数,两个都应该用 HTTPS。

🧑‍💻 面试官:那 HTTP 说 GET 是安全方法,这里的安全究竟指什么?

先讲方法语义,再讲参数位置。“安全方法”不等于保密,POST 也不会自动保证不重复执行。

面试速答(60 秒版)

GET 的语义是获取目标资源的表示,POST 是让目标资源按自己的规则处理提交的内容。参数放在哪里,不是二者的定义。

GET 属于安全、幂等的方法。这里安全指客户端没有请求改变资源状态,不是密码传输安全;幂等指重复同一请求的预期效果相同,不要求每次响应完全一样。POST 没有这两项普遍保证,但业务可以通过幂等键等机制避免重复处理。

POST 可以同时带 URL 查询参数和请求体。GET 请求体没有通用定义的语义,不应作为常规接口约定。保密要依靠 HTTPS、日志控制和敏感信息处理,不靠把 GET 改成 POST。

缓存也按协议头和实现判断,不能简单说 GET 必定缓存、POST 永远不能缓存。

HTTP 方法语义、传输保护与业务去重是三个不同问题

知识点详解:方法名字决定的是意图,不是参数容器

读资料和提交操作,先分清接口要表达什么

假设查询某篇文章,GET /articles/42 表达获取其表示;提交一条评论,POST /articles/42/comments 表达请服务器处理评论内容。

两者都可能有查询参数,比如语言或处理选项。POST 的请求体可以承载 JSON、表单或其他内容,格式由 Content-Type 等约定表达。

把所有接口都改成 POST,确实能让你继续传数据,但会隐藏读写意图,影响缓存、链接、工具和基础设施的使用。

安全方法允许附带变化,但不该承载删改意图

读取文章时写访问日志、计数,这是服务端实现可能带来的附带效果;它不等于客户端请求删除或修改文章。

反过来,GET /delete?id=42 即使技术上能运行,也违背了安全方法的语义。浏览器预取、爬虫访问或代理重试可能在你没预料的时机触发它。

安全方法这个词并不承诺 URL 不被记录。HTTPS 保护传输链路,但应用、反向代理和浏览器历史等仍可能保存地址;把秘密塞进查询参数尤其需要谨慎。

幂等讨论的是效果,不是返回值

假设同一个删除请求执行两次,第一次删除成功,第二次返回不存在。返回值变了,但目标都处于已删除状态,这仍可能符合幂等语义。

POST 创建评论通常会新增多条,因此不能默认幂等。若客户端超时后重试,服务端需要识别这是同一次提交,还是用户真想提交两条。

业务幂等键的范围、有效期、并发处理和结果保存都要设计。只传一个 requestId,却没有唯一约束或可靠记录,不能保证避免重复。

不要把常见行为背成协议禁令

有的工具能发送带请求体的 GET,不表示所有服务器、代理和客户端都认可它的含义。公共接口尽量把查询条件放入明确约定的位置,过长或复杂查询可采用另行设计的 POST 查询接口。

HTTP 并没有统一规定 GET 参数最多只能多少字符。限制可能来自浏览器、代理、服务器或配置。缓存同样要看响应头、认证、缓存键和部署策略。

面试回答可以先用语义建立边界,再补充你熟悉的工程约束,不要用某个框架的行为替代标准。

本题机制参考:HTTP 语义 RFC 9110、MDN GET、MDN POST。

面试官继续追问

GET 的结果变化了,还算幂等吗?

可以。幂等描述请求的预期作用,资源被其他操作更新后,读取结果当然可能变化。

POST 接口能重试吗?

能,但需要确认应用语义和去重机制。不能因为网络层允许重发,就认定业务不会重复发生。

敏感查询改 POST 就足够了吗?

不够。HTTPS、授权、日志脱敏、缓存策略和数据最小化都要考虑,请求体也可能被记录。

面试速记卡

  • GET:获取表示;POST:按目标资源规则处理提交内容。
  • 安全:不请求状态变化,不是保证保密。
  • 幂等:重复请求预期效果相同,不是响应相同。
  • 参数:POST 也能带查询参数;GET body 无通用语义。
  • 工程:TLS、缓存和业务幂等各自设计。

公司面试真题

真题根据求职者公开面经整理,题意经过概括,非逐字原话或公司官方题库;本文为 Sunday 的独立解析。

  • 小米 · 前端 · 原帖未明确批次

    GET 与 POST 有什么区别?(题意整理)

    小米前端二面 ↗
    原帖编辑于 2024-05-29

  • 快手 · AI应用开发算法 · 原帖未明确批次

    HTTP GET 和 POST 有什么区别?(题意整理)

    快手AI应用开发算法一面面经 ↗
    页面显示 05-02 发布,未明确年份

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历