Vite和HTTP 服务器

目录

[💻 常见的 HTTP 服务器软件](#💻 常见的 HTTP 服务器软件)

[1. Vite 的核心:一个内置的开发服务器 🏗️](#1. Vite 的核心:一个内置的开发服务器 🏗️)

[2. 为什么说它是"定制化"的?🚀](#2. 为什么说它是“定制化”的?🚀)

[3. Vite 服务器的工作流程 🔄](#3. Vite 服务器的工作流程 🔄)

[4. 还有一个"隐形"的服务器:WebSocket 📡](#4. 还有一个“隐形”的服务器:WebSocket 📡)

[5. 代理服务器:解决跨域 🔄](#5. 代理服务器:解决跨域 🔄)

[📌 总结](#📌 总结)


💻 常见的 HTTP 服务器软件

  • Nginx:高性能的 Web 服务器和反向代理服务器,以其高并发处理能力和稳定性而闻名。
  • Apache HTTP Server:老牌的、功能强大的 Web 服务器,模块化设计,应用非常广泛。
  • Node.js :JavaScript 运行时,可以使用内置的 http 模块或 Express 等框架轻松创建 HTTP 服务器。
  • IIS:微软开发的 Web 服务器,通常运行在 Windows 系统上。

Vite 本质上就是一个针对现代前端开发高度定制化的 HTTP 服务器

以下是 Vite 与 HTTP 服务器之间关系的详细解读:

1. Vite 的核心:一个内置的开发服务器 🏗️

当你运行 vitenpm run dev 命令时,Vite 做的第一件事就是在你的本机(localhost)启动一个 HTTP 服务器

  • 底层架构 :这个服务器在底层利用了 Node.js 的能力。早期版本主要基于 Koa(一个轻量级的 Node.js Web 框架),而新版本则更多使用 Connect 或原生 Node.js 模块来构建中间件系统。
  • 主要职责 :它负责监听指定的端口(默认通常是 51733000),接收浏览器的请求,并返回相应的资源。

2. 为什么说它是"定制化"的?🚀

普通的 HTTP 服务器(如 Nginx)只是简单地把文件从硬盘读取出来发给浏览器。而 Vite 的服务器是一个**"智能"编译服务器**。

Vite 的服务器利用了浏览器原生支持 ES 模块的特性,改变了传统的"打包"逻辑:

表格

传统 Webpack 服务器 Vite 服务器
先打包,再启动:启动前需将所有代码打包成 bundle,项目大时很慢。 不打包,按需编译:启动时只启动服务器,浏览器请求什么,服务器就编译什么。
静态文件服务:提供的是打包好的最终文件。 动态编译服务 :提供的是实时转换后的模块(如将 .vue.ts 实时编译成 JS)。

3. Vite 服务器的工作流程 🔄

当你的浏览器访问 http://localhost:5173 时,Vite 服务器内部发生了什么?

  1. 请求 HTML :浏览器请求 index.html,服务器直接返回文件。
  2. 解析模块 :HTML 中包含 <script type="module" src="/src/main.js">,浏览器自动发起对 main.js 的请求。
  3. 拦截与转换 :Vite 服务器拦截这个请求。
    • 如果是 普通 JS:直接返回。
    • 如果是 TypeScript / Vue / JSX:服务器在内存中实时将其编译成浏览器可识别的 JavaScript,然后返回。
    • 如果是 依赖包 :Vite 会先进行"依赖预构建",利用 esbuild(一种极快的打包器)将 node_modules 中的库转换为 ESM 格式,然后通过 HTTP 提供给浏览器。

4. 还有一个"隐形"的服务器:WebSocket 📡

除了处理网页内容的 HTTP 服务器 ,Vite 在启动开发服务器时还会建立一个 WebSocket 服务器

  • 作用:建立浏览器与开发服务器之间的双向通信通道。
  • 场景:当你修改了一个文件并保存时,Vite 服务器通过 WebSocket 通知浏览器:"文件变了,请重新加载这个模块"。
  • 结果 :这就是热更新的原理,它不需要刷新整个页面,而是只替换变化的模块。

5. 代理服务器:解决跨域 🔄

在开发中,前端和后端通常运行在不同的端口(如前端 5173,后端 3000),这会导致跨域问题

Vite 的 HTTP 服务器内置了代理功能(Proxy):

  • 原理 :你在 vite.config.js 中配置代理规则。当浏览器请求 /api/user 时,Vite 服务器会作为"中间人",将这个请求转发给后端服务器(如 http://localhost:3000/api/user),拿到数据后再转给浏览器。
  • 效果:浏览器认为自己是在和同源服务器通信,从而绕过了跨域限制。

📌 总结

Vite 就是 HTTP 服务器,但不仅仅是 HTTP 服务器。

  • 对于浏览器:它是一个标准的 HTTP 服务器,提供网页、脚本和样式。
  • 对于开发者 :它是一个即时编译器热更新中心

正是因为它利用了现代浏览器的 ESM 特性,并结合了内存中快速编译(esbuild)和 WebSocket 通信,才使得它的启动速度和热更新速度远超传统的基于打包的构建工具。

相关推荐
H_z_q24012 小时前
RHCE的时间服务器与NTP、chrony
java·运维·服务器
python开发笔记2 小时前
can(6) canopen python库使用
服务器·网络·python
_风华ts2 小时前
UObject复制与RPC
网络·c++·网络协议·rpc·虚幻
cc_beolus2 小时前
服务器介绍
运维·服务器
青果网络_xz2 小时前
IP静态是什么意思?静态IP适用于哪些业务场景?
网络·网络协议·tcp/ip
小鸡脚来咯2 小时前
Linux 服务器问题排查指南(面试标准回答)
linux·服务器·面试
奔跑的web.3 小时前
TypeScript 全面详解:对象类型的语法规则
开发语言·前端·javascript·typescript·vue
小李独爱秋3 小时前
计算机网络经典问题透视:电子邮件的安全协议PGP主要都包含哪些措施?
运维·服务器·网络·网络协议·计算机网络·安全
小李独爱秋3 小时前
计算机网络经典问题透视:互联网的网络层安全协议族IPsec都包含哪些主要协议?
运维·服务器·开发语言·网络协议·计算机网络·安全