action属性必须为相对路径或完整url,不可为空或仅写“/”;method属性仅支持小写的get和post,分别用于无副作用查询和有状态操作,且需匹配后端路由、http方法及csrf等要求。

action 属性必须写成相对路径或完整 URL,不能留空或只写斜杠
留空 action 会导致表单提交到当前页面 URL(包括查询参数),容易引发重复提交或路由错误。只写 / 会提交到根路径,常与后端路由不匹配。
常见写法:
-
action="/api/login"—— 相对路径,推荐用于同域 API -
action="https://example.com/submit"—— 完整 URL,跨域或第三方服务必需 -
action="./process.php"—— 同目录下脚本,注意.开头才表示当前目录
特别注意:如果页面 URL 是 https://site.com/user/edit?id=123,且 action="",提交会发到 https://site.com/user/edit?id=123,后端可能无法正确解析。
method 属性只有 get 和 post 两种合法值,大小写敏感
method 不区分大小写,但 HTML 规范要求小写,浏览器也只识别 get 和 post(不是 GET 或 Post)。
选哪个?
- 用
method="get":适合搜索、筛选等无副作用操作;数据出现在 URL 中,可收藏/分享;有长度限制(通常 ~2000 字符) - 用
method="post":适合登录、创建、修改等操作;数据在请求体中,无长度限制;不会被缓存或预加载
别写 method="PUT" 或 method="delete" —— 浏览器原生 <form></form> 只支持 get 和 post。想用其他方法得靠 JS 提交或隐藏字段模拟。
form 提交时 action 和 method 一起决定请求地址和方式
比如:<form action="/search" method="get"><input name="q" value="js"></form> 点击提交后,浏览器发起的是:
GET /search?q=js
而 <form action="/api/comment" method="post"><textarea name="text">hello</textarea></form> 发起的是:
POST /api/comment Content-Type: application/x-www-form-urlencoded text=hello
关键点:
-
get把所有<input>的name=value拼成查询字符串,追加到action后面 -
post把数据放在请求体里,默认编码为application/x-www-form-urlencoded - 如果
action是绝对 URL,method="get"仍会把参数拼在 URL 末尾,不是替换整个 URL
容易忽略的兼容性细节:method 默认是 get,但别依赖它
不写 method 属性时,浏览器按规范默认为 get。但很多新手误以为“没写就是 post”,结果表单数据全暴露在 URL 里。
更隐蔽的问题:
- 某些老旧代理或安全设备会拦截非
get/post方法的表单(哪怕你用 JS 改了) - 使用
<button type="submit"></button>时,若按钮有name,它的值也会随表单一起提交——这点和action/method无关,但常和它们一起出问题 - 如果后端框架(如 Django、Express)启用了 CSRF 保护,
post表单必须带 token 字段,否则 403,跟action和method写得再对也没用
真正要确认的,从来不是属性怎么写,而是浏览器发出的请求是否符合后端期待的路径、方法、编码格式和字段结构。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











