面试知识库
基础

GET与POST区别#

一句话答案#

GET 语义获取资源、参数在 URL、幂等可缓存;POST 语义提交数据、参数在 Body、非幂等不缓存。

核心要点
维度GETPOST
语义获取资源提交数据
参数位置URL查询串请求Body
幂等
缓存可缓存不缓存
长度受URL长度限制无限制

本质: HTTP方法只是语义约定,技术上 GET 也能带 Body(不推荐)

面试回答(2分钟版)

GET 和 POST 本质上都是 HTTP 请求方法,区别主要在语义约定和使用场景。GET 的语义是获取资源,参数拼接在 URL 的查询字符串中,是幂等的,意味着多次请求结果相同,因此浏览器和 CDN 可以对 GET 请求做缓存。POST 的语义是提交数据,参数放在请求体 Body 中,不是幂等的,每次提交可能产生不同的副作用,所以不会被缓存。GET 请求的参数长度受 URL 限制,浏览器通常限制在 2KB 到 8KB 不等,POST 理论上没有长度限制。但要注意几个常见误区:一是安全性方面,GET 参数虽然在 URL 中可见,但 POST 参数在抓包时同样可见,真正的安全要靠 HTTPS 加密传输;二是技术上 GET 也可以带 Body,只是 HTTP 规范不推荐且部分服务器和代理不支持;三是性能上两者没有本质区别。RESTful API 设计中 GET 用于查询、POST 用于创建、PUT 用于更新、DELETE 用于删除,遵循的都是语义约定。

追问与易错

追问方向:

  • “GET 请求有长度限制吗?”→ HTTP 规范无限制,但浏览器和服务器有限制(浏览器通常 2KB~8KB,Nginx 默认 8KB),超长参数应改用 POST
  • “GET 能带 Body 吗?”→ HTTP 规范不禁止但不推荐,部分服务器和代理会忽略 GET 的 Body,Elasticsearch 的 _search API 曾用 GET+Body
  • “PUT 和 POST 区别?”→ PUT 是幂等的(重复调用结果一样,语义为替换整个资源),POST 是非幂等的(语义为创建新资源),RESTful 中 PUT 更新 POST 创建

易错点:

  • ❌ GET 不安全 POST 安全——只是参数位置不同安全靠 HTTPS
  • ❌ POST 一定比 GET 慢——没有性能区别