form的method属性仅控制原生HTML表单提交时的HTTP方法,JS干预(如fetch/axios或preventDefault)会使它完全失效;GET将参数拼在URL后,POST将数据放请求体中。

form 的 method 属性到底控制什么
它只在原生 HTML 表单提交(无 JavaScript 干预、未调用 event.preventDefault())时生效。一旦你用 fetch() 或 axios 手动发请求,method 属性就完全被忽略——后端看到的 HTTP 方法由 JS 代码决定,跟表单标签无关。
GET 和 POST 在浏览器行为上最直观的差异
浏览器对两者的处理逻辑完全不同:
- GET:把所有
的值自动拼成查询字符串,追加到actionURL 后面,用?分隔;如果action原本带参数(比如action="search.php?from=home"),新参数会覆盖或合并原有参数,具体取决于服务器解析方式 - POST:URL 保持不变,所有字段数据都塞进 HTTP 请求体(body),不暴露在地址栏
- GET 提交后,刷新页面只是重发一次查询;POST 刷新会触发浏览器弹窗提示“确认重新提交”,但用户点确定就会真发第二次——这不是防重复的可靠手段
后端取不到参数?先看 method 和接收位置是否匹配
前后端参数来源是严格分离的,框架不会自动合并:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 前端
method="get"→ 后端必须从 query string 读,比如 Express 的req.query、Flask 的request.args、PHP 的$_GET - 前端
method="post"→ 后端必须从请求体读:req.body(Express 需配express.urlencoded())、request.form(Flask)、$_POST(PHP) - 如果表单含
,POST 还必须加enctype="multipart/form-data",否则后端收不到文件二进制内容,只拿到空对象或文件名字符串 - 常见错误:前端用 POST,但 Express 没启用
urlencoded中间件 →req.body永远是空对象{}
选 GET 还是 POST,关键看这三点
不是“哪个更安全”,而是看操作本质和副作用:
- 能被缓存、收藏、分享、出现在服务器日志里的,才适合 GET:搜索、分页、详情页跳转
- 会修改服务器状态(创建订单、扣款、发评论)、含敏感信息(密码、token)、或数据量大(长文本、文件)的,必须用 POST
- URL 长度限制真实存在:Chrome 理论支持约 2MB,但 IE 会截断超过 2083 字符的 URL;实际建议控制在 2KB 内,避免不同环境表现不一致
- 最容易被忽略的是幂等性:GET 是幂等的,POST 默认不是;后端若没做唯一 token 校验或订单号去重,仅靠前端禁用按钮无法防止重复提交










