form.method必须全小写为"get"或"post",大小写混用或非法值会导致浏览器静默降级为get,ie11等旧浏览器可能直接失效,引发req.body为空、参数出现在url等严重问题。

form.method必须小写,大小写混用会静默降级为get
浏览器只认get和post两个全小写字符串。写成GET、Post甚至method="submit",多数现代浏览器会静默 fallback 到get——不报错,但后端收不到req.body。政企内网里还跑着 IE11 的场景下,这种写法大概率直接失效。
常见错误现象:req.body是空对象,而req.query里却有参数;或者前端明明点了“提交”,Network 面板里看到的却是 GET 请求。
- 永远用
method="get"或method="post",别加首字母大写 - 服务端不要假设 method 值“看起来像 POST 就一定是 POST”,得校验
req.method === 'POST' - 如果用 JS 动态改
form.method,确保赋值是字符串"get"或"post",不是数字、布尔或 undefined
漏写method属性时,默认行为是get,不是post
HTML 规范明确:未声明method时,浏览器按get处理。哪怕你写了enctype="multipart/form-data",哪怕表单里有<input type="file">,它照样被丢弃——因为 get 不支持文件字段序列化。
这在极简请求(比如只有一行 form 标签 + 一个 submit 按钮)下特别危险:开发者以为“没写就是默认 post”,结果上传失败、密码明文出现在 URL 里、刷新页面重复提交查询。
- 只要表单要发数据到后端,就显式写上
method="post",别省那几个字符 - 检查模板渲染逻辑:后端模板(如 EJS、Thymeleaf)可能因变量为空导致
method属性被完全 omit - 用 DevTools 的 Elements 面板直接看最终渲染出的
<form></form>标签,确认method存在且值正确
formmethod只对submit按钮生效,不能写在form上
formmethod是 HTML5 提供的覆盖机制,但它只绑定在<button type="submit"></button>或<input type="submit">上。写在<form></form>标签上会被浏览器完全忽略,连 warning 都没有。
典型误用场景:想让“搜索”按钮走 get、“提交”按钮走 post,结果两个都发了 get——因为formmethod="get"写在了<form></form>里,压根没起作用。
- 正确写法:
<button type="submit" formmethod="get">搜索</button> -
formmethod不支持put、delete等值,只接受get/post - 它不影响 JS 调用
form.submit()的行为,后者完全绕过formmethod逻辑
极简环境里最容易被忽略的:IE 和旧 Safari 对 method 的解析更严格
Chrome/Firefox 对method值容忍度高,但 IE8–11 和 Safari ≤12.1 在遇到非法值(如空格、引号不闭合、大小写混用)时,不是降级,而是直接放弃识别整个method属性,退回到默认get。而且它们不会在控制台报错。
这意味着:你在本地 Chrome 测试没问题,一上线到某银行内网 IE11 环境,所有表单提交都变成明文 URL 查询,用户密码全进日志。
- 用
document.querySelector('form').method在控制台手动读取,确认值确实是"get"或"post"字符串 - 避免在
method属性里拼接变量(如method="{{method}}"),模板渲染出空格或换行会导致解析失败 - 如果目标环境含 IE,建议加一行防御性 JS:
if (!['get', 'post'].includes(form.method.toLowerCase())) form.method = 'post';
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











