大数跨境

Form 表单 GET 和 POST 到底差在哪?看完直接上手写代码

Form 表单 GET 和 POST 到底差在哪?看完直接上手写代码 软件工程师奇谈
2026-06-01
1
导读:做开发、学前端、刷面试题,GET 和 POST 是绕不开的基础。但很多人学了很久,只记住一句话:GET 不安全,POST 安全。

做开发、学前端、刷面试题,GET 和 POST 是绕不开的基础。

但很多人学了很久,只记住一句话:GET 不安全,POST 安全

真正项目里:什么时候用 GET?什么时候用 POST?参数藏在哪?能不能传文件?为什么刷新会重复提交?

今天这篇,通俗原理 + 场景总结 + 可直接运行代码,一次性彻底吃透 Form 表单两大提交方式。

一、一句话区分核心本质


记住这句万能准则,90% 的场景不会用错

  • GET:只读,用来 “查数据”只是向服务器获取信息,不修改任何数据、没有副作用、刷新一万次结果都一样

  • POST:提交,用来 “改数据”向服务器推送信息,用于新增、修改、保存数据,刷新可能重复提交

通俗类比:

  • GET = 查成绩、翻帖子、搜商品(只看不变)
  • POST = 改密码、发评论、提交注册(提交即变更)

二、5 个最关键真实差异(工作 / 面试高频)


1. 参数位置:肉眼最直观区别

  • GET:参数拼在 URL 地址栏格式:?name=xxx&pwd=xxx,浏览器地址、历史记录、书签全部看得见

  • POST:参数放在请求体 Body 里地址栏干干净净,普通用户看不到,需要抓包 / 开发者工具才能查看。

2. 安全性:破除最大误区

很多人以为 POST 加密了 ——其实没有!

  • GET:明文暴露,绝对不能放密码、手机号、身份证
  • POST:只是隐藏地址栏,未加密,抓包依然能看到

真正的安全只看 HTTP / HTTPS,和 GET、POST 无关。

3. 数据长度 & 文件上传

  • GET:URL 有长度限制,只能传短文本,不能传文件、图片
  • POST:无浏览器长度限制,所有文件上传一律只用 POST

4. 缓存与体验

  • GET 可缓存,搜索、列表页打开更快
  • POST 不缓存,每次都是全新请求,适合提交实时数据

5. 幂等性(面试必问)

  • GET 幂等:多次请求 = 一次请求,数据不变、无副作用
  • POST 不幂等:多次提交 = 多次生效(重复注册、重复下单)

三、标准使用场景(直接背下来)


✅ 必须用 GET

  • 搜索功能、条件筛选、分页
  • 列表查询、详情页查看
  • 分享链接、生成书签

✅ 必须用 POST

  • 登录、注册、退出
  • 提交表单、修改资料
  • 上传图片、文件、视频
  • 支付、订单提交

四、手把手实操:可直接运行完整代码


给大家两段极简原生 HTML 代码,新建记事本改后缀为 .html 即可直接打开测试

1、GET 表单示例(搜索类)

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <title>GET表单演示</title></head><body>    <h3>GET提交演示(参数显示在地址栏)</h3>    <!-- action填写接口地址,这里用#代表当前页面,能清晰看到拼接参数 -->    <form action="#" method="get">        用户名:<input type="text" name="username" placeholder="请输入名称"><br><br>        搜索关键词:<input type="text" name="key" placeholder="输入搜索词"><br><br>        <button type="submit">GET方式提交查询</button>    </form></body></html>
提交后现象
地址栏会变成:xxx.html?username=xxx&key=xxx,参数完全暴露。
2、POST 表单示例(登录 / 提交类)
<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <title>POST表单演示</title></head><body>    <h3>POST提交演示(参数隐藏在请求体)</h3>    <form action="#" method="post">        账号:<input type="text" name="account"><br><br>        密码:<input type="password" name="pwd"><br><br>        <button type="submit">POST登录提交</button>    </form></body></html>

提交后现象地址栏无任何参数,数据全部在请求体传输,适合敏感信息。

查看 POST 数据的方法(新手必学)

  1. 1.页面按 F12 打开开发者工具
  2. 2.切换到 Network
  3. 3.勾选 Preserve log,提交表单
  4. 4.找到对应请求,查看 Payload/请求体 即可看到提交内容

  1. 五、开发 & 面试高频:幂等性与使用规范


  2. 这是进阶开发和面试必考的知识点,也是区分新手和熟手的关键:


  3. 什么是幂等性?


  4. 简单说:相同请求执行多次,结果和执行一次完全一致

    • GET 是幂等操作:多次查询同一数据,结果一模一样,不会产生任何副作用;
    • POST 是非幂等操作:多次提交相同数据,会多次生效(比如连续点注册,生成多个相同账号)。

    行业强制使用规范(开发必遵守)


    1. 所有查询、检索、浏览类操作,统一用 GET;
    2. 所有新增、修改、删除、提交、上传类操作,统一用 POST;
    3. 敏感信息(密码、验证码、隐私资料)严禁使用 GET
    4. 但凡涉及文件上传,只能使用 POST。


六、极简终版对照表(收藏备用)


维度
GET
POST
作用
查询、获取数据
提交、修改数据
参数位置
URL 地址栏
请求体 Body
安全性
低、明文暴露
较高、隐藏不外露
长度限制
有限制
无限制
文件上传
不支持
支持
缓存
可缓存
不缓存
幂等性
幂等安全
非幂等,防重复提交




写在最后


GET 和 POST 没有谁高级谁低级,只有场景合不合适

记住一条万能公式:查用 GET、写用 POST;明文用 GET、敏感用 POST、上传只用 POST。

这是前后端交互、接口测试、网络安全、面试基础的重中之重,吃透这篇,彻底告别模糊认知!



【声明】内容源于网络
0
0
软件工程师奇谈
软件工程师奇谈,除了程序,还有生活~
内容 77
粉丝 0
软件工程师奇谈 软件工程师奇谈,除了程序,还有生活~
总阅读824
粉丝0
内容77