前后段不分离页面请求流程
在前后端不分离的应用架构中,服务器通常会生成完整的 HTML 页面(包括数据和视图),然后将这些页面直接发送到客户端的浏览器。这种架构模式下,前端主要负责展示,而所有业务逻辑、数据处理等都在后端完成。以下是前后端不分离页面请求流程的基本步骤:
用户发起请求:当用户点击链接或在浏览器地址栏输入 URL 时,浏览器会发起一个 HTTP(S)请求到指定的服务器。
DNS 解析:如果目标服务器的 IP 地址没有被缓存,浏览器首先需要通过 DNS 查询将域名转换为对应的 IP 地址。
建立 TCP 连接:获取到服务器的 IP 地址后,浏览器与服务器之间建立 TCP 连接。如果是 HTTPS 请求,还需进行 SSL/TLS 握手过程以确保通信的安全性。
服务器处理请求:
- 服务器接收到请求后,根据请求的路径和参数,执行相应的后台逻辑。这可能涉及到查询数据库获取数据,或者调用其他服务接口来准备渲染页面所需的数据。
- 在这个阶段,所有的页面构建工作都由后端完成。后端框架(如 Django、Spring MVC 等)会结合模板引擎(如 Jinja2、Thymeleaf 等)使用获取到的数据填充 HTML 模板,生成最终的 HTML 文档。
发送响应:服务器将生成的完整 HTML 页面作为 HTTP 响应返回给客户端。该响应包含了状态行(例如 HTTP/1.1 200 OK)、响应头部以及包含整个网页内容的响应体。
浏览器渲染页面:浏览器接收到服务器返回的 HTML 文档后开始解析,并按照 HTML 文档结构构建 DOM 树。同时,它还会下载页面中引用的所有资源(如 CSS 文件、JavaScript 脚本、图片等),并应用样式和执行脚本以呈现完整的用户界面。
交互处理:由于大部分逻辑已经在服务器端完成,前端的 JavaScript 主要用于增强用户体验,比如表单验证、简单的动态效果等。对于任何后续的用户操作(如提交表单),通常会导致新的页面加载或部分页面刷新,触发新一轮的请求-响应循环。
这种方式的优点在于开发简单,适合于传统的网站开发。然而,随着 Web 应用程序变得越来越复杂,前后端不分离的方式逐渐显示出其局限性,特别是在处理复杂的用户交互和提高性能方面。因此,在现代 Web 开发中,越来越多的项目采用前后端分离的架构,其中前端专注于用户体验和界面展示,而后端则专注于提供 API 服务。但在一些场景下,特别是对 SEO 友好性和初始加载速度有较高要求的情况下,前后端不分离的架构仍然具有一定的优势。