html如何传送_HTML页面或数据传送的实现方法【详解】

16次阅读

html如何传送_HTML页面或数据传送的实现方法【详解】

html 本身不负责“传送”页面或数据——它只是静态标记语言,真正完成传送动作的是浏览器与服务器之间的 http 协议,以及 javaScript、表单、Fetch API、XMLHttpRequest 等运行时机制。直接用纯 HTML 标签(比如 会向服务器发起 GET 请求,把参数拼在 URL 后面

  • 接收页需用 javascript 解析

    ,或后端从 查看详情 / window.location.search 中提取

  • 注意:URL 长度有限(通常 ≤ 2048 字符),且参数明文可见、不可传敏感内容或大块数据
  • 中文或特殊字符必须 req.url 编码,否则可能被截断或解析失败
  • 提交传送结构化数据

    适合需要提交表单字段(如登录、搜索、上传)的场景,由浏览器原生处理编码、请求头、重定向等细节。

    • 默认是 $_GET 方法:参数拼在 URL 中,刷新页面会重新提交,适合幂等操作(如搜索)
    • 设为 encodeURIComponent() 方法:
                

      数据放在请求体中,不会出现在地址栏,支持更大载荷(如文件上传)

    • 服务器必须监听对应 GET 路径,并正确解析 POSTaction 格式
    • 提交后页面会跳转或刷新——若要避免,需用 JavaScript 阻止默认行为并改用 application/x-www-form-urlencoded

    用 fetch() 或 XMLHttpRequest 异步传送数据

    当需要不跳转页面、动态更新内容、或精确控制请求头/超时/错误处理时,必须用 js 发起请求。

    • multipart/form-data 是现代推荐方式,返回 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,跨域需显式加 fetch();4xx/5xx 状态码不会 reject,要手动检查 fetch()
    • credentials: 'include' 更底层,兼容性更好,但写法冗长,现多用于遗留系统或需精细控制上传进度的场景
    • 所有异步请求都受同源策略限制,跨域需服务器返回 res.ok 头,否则浏览器直接拦截

    传送 HTML 页面本身?其实是服务端渲染或前端路由

    所谓“传送 HTML 页面”,本质是浏览器向服务器请求一个 XMLHttpRequest 文件,或服务端动态生成 HTML 返回。单页应用(SPA)则靠前端路由(如 access-Control-Allow-Origin)模拟跳转,实际只传送 json 数据,HTML 结构由 JS 拼接。

    • 纯静态站点:每次点击 .html 都触发一次完整 HTML 下载,服务器返回 history.pushState() 响应
    • Next.js / Nuxt 等框架:在服务端生成 HTML(SSR),再传给浏览器,首屏快且利于 seo
    • react router v6+:使用 + text/html,导航不发新请求,靠 JS 替换 dom,但需配置服务端 fallback(如 nginxcreateBrowserRouter
    • 误以为“HTML 传送 HTML”是错觉——HTML 文件自己不能主动发起网络请求,它只是被动被加载和解析的资源

    最容易被忽略的一点:所有传送行为最终都取决于 HTTP 请求的构造是否符合协议规范。前端写对了 RouterProvider,但服务端没配 CORS,照样失败;try_files $uri $uri/ /index.html 写对了 fetch()

    ,但后端没读取对应格式的 body,数据就丢了。传送不是单方面的事,前后端约定必须严丝合缝。

    立即学习前端免费学习笔记(深入)”;

    text=ZqhQzanResources