深入剖析 Web HTTP 请求:从浏览器到服务器的完整流程

目录

背景

[1. 用户输入 URL ------ 浏览器发起请求](#1. 用户输入 URL —— 浏览器发起请求)

[步骤:DNS 解析](#步骤:DNS 解析)

[步骤:建立 TCP 连接(TCP 三次握手)](#步骤:建立 TCP 连接(TCP 三次握手))

[2. 构建 HTTP 请求报文](#2. 构建 HTTP 请求报文)

[3. 服务器接收请求与中间层路由](#3. 服务器接收请求与中间层路由)

步骤:反向代理与负载均衡

步骤:应用层处理

[4. 生成 HTTP 响应报文](#4. 生成 HTTP 响应报文)

[5. 响应返回给浏览器客户端](#5. 响应返回给浏览器客户端)

[6. 浏览器显示结果](#6. 浏览器显示结果)

总结


背景

当你在浏览器中输入一个 URL 并按下回车时,从客户端发送请求到服务器响应再返回浏览器,这一过程涉及多个环节。本文将深入解析从浏览器客户端发出 HTTP 请求,到服务器处理请求、经过中间层路由,最后响应到浏览器的整个流程。

1. 用户输入 URL ------ 浏览器发起请求

首先,用户在浏览器地址栏输入一个 URL,比如 https://www.example.com。浏览器的任务是解析这个 URL,并通过 HTTP 协议向服务器发送请求。URL 的结构大致可以分为以下几个部分:

  • 协议(https://):指定使用的协议,常见的有 HTTP 和 HTTPS。
  • 域名(www.example.com:用来标识服务器位置,通常需要通过 DNS 查找解析为一个 IP 地址。
  • 路径(/path/to/resource):指定服务器上的资源位置。
  • 查询参数(key=value):用于传递额外的信息。
步骤:DNS 解析

在浏览器能够向服务器发送请求之前,它需要将域名(如 www.example.com)转换为服务器的 IP 地址。这个过程叫做 DNS 解析。浏览器会向本地 DNS 服务器发送查询请求,获取目标服务器的 IP 地址。

步骤:建立 TCP 连接(TCP 三次握手)

获取到目标服务器的 IP 地址后,浏览器会通过 TCP/IP 协议 与服务器建立连接。在 HTTPS 中,除了 TCP 连接之外,还会进行 SSL/TLS 握手,以确保通信的加密与安全性。

2. 构建 HTTP 请求报文

一旦 TCP 连接建立成功,浏览器就开始构建 HTTP 请求报文。一个典型的 HTTP 请求包括:

  • 请求行:包含请求方法(如 GET、POST 等)、请求的 URL 路径、协议版本(如 HTTP/1.1)等。
  • 请求头部:包含用户代理(浏览器类型)、接受的内容类型、Cookies 等信息。
  • 请求体(可选):在 POST 请求中,客户端向服务器发送的实际数据,通常是表单数据或 JSON 格式的请求体。

例如,浏览器向服务器发送的 GET 请求可能如下所示

复制代码
GET /path/to/resource HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
3. 服务器接收请求与中间层路由

当 HTTP 请求到达目标服务器时,服务器首先通过负载均衡器进行流量分配,确保请求能够被正确路由到后端的 Web 服务器或应用服务器。如果有中间层(如反向代理、API 网关等),它会根据请求的路径、参数等信息将请求转发到正确的处理程序。

步骤:反向代理与负载均衡

许多大型应用部署了反向代理(如 Nginx、HAProxy 等)和负载均衡策略,目的是提高系统的性能和可扩展性。反向代理服务器会根据请求的不同特征(如路径、头信息等)将请求分发到不同的应用服务器实例。

例如,www.example.com/api/ 可能被路由到 API 服务,而 www.example.com/static/ 可能被路由到静态资源服务器。

步骤:应用层处理

服务器或应用层接收到请求后,会根据请求的内容执行相应的业务逻辑。比如:

  • 查询数据库。
  • 处理表单提交。
  • 动态生成 HTML 内容。
  • 返回 API 响应(如 JSON 数据)。
4. 生成 HTTP 响应报文

经过处理后,服务器会构建一个 HTTP 响应报文,准备返回给客户端。一个典型的 HTTP 响应报文由以下几部分组成:

  • 响应行:包含响应的状态码(如 200 OK、404 Not Found 等)、响应的协议版本(如 HTTP/1.1)等。
  • 响应头部 :包含服务器信息、返回的内容类型(如 Content-Type: text/html)、缓存策略、Cookies 等。
  • 响应体:包含服务器返回的实际内容,通常是 HTML 文件、JSON 数据或其他资源。

例如,服务器返回的响应可能如下所示:

复制代码
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

<!DOCTYPE html>
<html>
<head><title>Example Page</title></head>
<body><h1>Welcome to Example!</h1></body>
</html>
5. 响应返回给浏览器客户端

服务器将响应报文通过 TCP 连接发送回浏览器。浏览器收到响应后,开始处理响应数据:

  • HTML 页面渲染:如果响应内容是 HTML 页面,浏览器会解析 HTML,构建 DOM 树,并渲染出页面。
  • 资源加载:如果 HTML 页面中有图片、CSS 或 JavaScript 文件,浏览器会根据文件路径发出进一步的请求,以加载这些资源。
  • 执行 JavaScript:浏览器会执行页面中的 JavaScript 代码,这可能会导致页面的动态变化或发起额外的网络请求(例如 AJAX 请求)。
6. 浏览器显示结果

最终,经过以上多个步骤的交互,浏览器将显示最终的页面或数据。用户看到的是经过 Web 服务器渲染出来的网页或 API 返回的数据。

总结

从浏览器发出请求,到服务器经过反向代理、路由、处理业务逻辑后返回响应,再到浏览器解析渲染,

相关推荐
stormsha6 分钟前
Linux中su与sudo命令的区别:权限管理的关键差异解析
linux·运维·服务器·鸿蒙系统·ux·batch命令
疯狂的沙粒18 分钟前
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
前端·uni-app·html
小妖66622 分钟前
html 滚动条滚动过快会留下边框线
前端·html
heroboyluck36 分钟前
Svelte 核心语法详解:Vue/React 开发者如何快速上手?
前端·svelte
海的诗篇_37 分钟前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
snetlogon2041 分钟前
JDK17 Http Request 异步处理 源码刨析
android·网络协议·http
琹箐1 小时前
ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
前端·javascript·anti-design-vue
程序员-小李1 小时前
VuePress完美整合Toast消息提示
前端·javascript·vue.js
Uyker2 小时前
从零开始制作小程序简单概述
前端·微信小程序·小程序
秋水丶秋水4 小时前
SSL安全证书怎么安装?
网络协议·http·https