
HTML 本身不负责“传送”页面或数据——它只是静态标记语言,真正完成传送动作的是浏览器与服务器之间的 HTTP 协议,以及 JavaScript、表单、Fetch API、XMLHttpRequest 等运行时机制。直接用纯 HTML 标签(比如 <a> 或 <form>)能触发传送,但背后依赖的是浏览器默认行为和服务器响应。
用 <a> 标签跳转并传送 URL 参数
这是最轻量、无 JS 的传送方式,适用于页面间简单传参(如 ID、分类、搜索关键词)。
-
<a href="detail.html?id=123&type=article">查看详情</a>会向服务器发起 GET 请求,把参数拼在 URL 后面 - 接收页需用 JavaScript 解析
window.location.search,或后端从req.url/$_GET中提取 - 注意:URL 长度有限(通常 ≤ 2048 字符),且参数明文可见、不可传敏感内容或大块数据
- 中文或特殊字符必须
encodeURIComponent()编码,否则可能被截断或解析失败
用 <form> 提交传送结构化数据
适合需要提交表单字段(如登录、搜索、上传)的场景,由浏览器原生处理编码、请求头、重定向等细节。
- 默认是
GET方法:参数拼在 URL 中,刷新页面会重新提交,适合幂等操作(如搜索) - 设为
POST方法:<form method="POST" action="/api/login"> <input type="text" name="username" required> <input type="password" name="password" required> <button type="submit">登录</button> </form>
数据放在请求体中,不会出现在地址栏,支持更大载荷(如文件上传) - 服务器必须监听对应
action路径,并正确解析application/x-www-form-urlencoded或multipart/form-data格式 - 提交后页面会跳转或刷新——若要避免,需用 JavaScript 阻止默认行为并改用
fetch()
用 fetch() 或 XMLHttpRequest 异步传送数据
当需要不跳转页面、动态更新内容、或精确控制请求头/超时/错误处理时,必须用 JS 发起请求。
立即学习“前端免费学习笔记(深入)”;
-
fetch()是现代推荐方式,返回 Promise,更简洁:fetch('/api/user', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: 123, status: 'active' }) }) .then(res => res.json()) .then(data => console.log(data)); - 注意:
fetch()默认不带 Cookie,跨域需显式加credentials: 'include';4xx/5xx 状态码不会 reject,要手动检查res.ok -
XMLHttpRequest更底层,兼容性更好,但写法冗长,现多用于遗留系统或需精细控制上传进度的场景 - 所有异步请求都受同源策略限制,跨域需服务器返回
Access-Control-Allow-Origin头,否则浏览器直接拦截
传送 HTML 页面本身?其实是服务端渲染或前端路由
所谓“传送 HTML 页面”,本质是浏览器向服务器请求一个 .html 文件,或服务端动态生成 HTML 返回。单页应用(SPA)则靠前端路由(如 history.pushState())模拟跳转,实际只传送 JSON 数据,HTML 结构由 JS 拼接。
- 纯静态站点:每次点击
<a>都触发一次完整 HTML 下载,服务器返回text/html响应 - Next.js / Nuxt 等框架:在服务端生成 HTML(SSR),再传给浏览器,首屏快且利于 SEO
- React Router v6+:使用
createBrowserRouter+RouterProvider,导航不发新请求,靠 JS 替换 DOM,但需配置服务端 fallback(如 Nginx 的try_files $uri $uri/ /index.html) - 误以为“HTML 传送 HTML”是错觉——HTML 文件自己不能主动发起网络请求,它只是被动被加载和解析的资源
最容易被忽略的一点:所有传送行为最终都取决于 HTTP 请求的构造是否符合协议规范。前端写对了 fetch(),但服务端没配 CORS,照样失败;<form> 写对了 method 和 enctype,但后端没读取对应格式的 body,数据就丢了。传送不是单方面的事,前后端约定必须严丝合缝。











