http的访问过程或者访问页面会发生什么

1. 建立连接

客户端与服务器之间需要建立 TCP 连接,常用步骤如下:

  • DNS解析:客户端将目标 URL 转换为服务器的 IP 地址。
  • 三次握手:TCP 协议通过三次握手建立可靠连接,确保双方具备通信能力。
  • 传输层连接建立:连接由服务器监听特定端口(如 HTTP 默认端口 80 或 HTTPS 的 443)。

2. 接受请求

HTTP 请求由客户端发送到服务器后,服务器根据自身的 I/O 模型接受和处理请求。

Web访问响应模型:
  • 单进程 I/O 模型

    单个进程通过同步阻塞 I/O 处理请求,适用于少量连接。缺点是性能低下,无法支持高并发。

  • 多进程 I/O 模型

    每个请求分配一个独立进程。

    优点:并发性能提升;

    缺点:进程切换成本高,占用更多系统资源。

  • 复用的单进程 I/O 模型

    单个进程处理多个请求,通过 I/O 多路复用机制(如 selectpollepoll)管理并发连接。

    优点:资源消耗低;

    缺点:编程复杂。

  • 复用的多进程 I/O 模型

    结合多进程和 I/O 复用,允许一个进程处理多个连接,同时多进程分担负载。

    优点:扩展性强;

    缺点:资源消耗较高。

C10K 问题

C10K(即 1 万个客户端同时连接)是高并发性能问题,传统 HTTP 服务器(如 Apache)采用多进程模型,遇到线程或进程管理瓶颈。

  • 解决方案:Nginx 使用事件驱动的异步非阻塞架构,通过 epoll 支持高并发。

3. 处理请求

服务器解析 HTTP 请求头和请求体:

  • 确定请求方法:GET、POST、PUT、DELETE 等;
  • 提取 URL 和查询参数;
  • 检查请求的协议版本和是否支持 HTTPS;
  • 校验请求是否合法(如认证信息、请求格式)。

4. 处理 GET 请求

如果是 GET 请求,服务器会按照以下步骤处理:

  • 资源定位:解析请求的路径映射到服务器资源。
  • 缓存处理:检查是否有缓存资源,决定是否返回缓存或处理新资源。
  • 文件读取或动态生成内容:对于静态文件(如 HTML、CSS、图片)直接读取磁盘;对于动态内容(如 API 返回数据),调用后端逻辑生成。

5. 生成响应头

服务器根据处理结果生成 HTTP 响应头,包含以下信息:

  • 状态行:协议版本、状态码(如 200 OK、404 Not Found、500 Internal Server Error等等)。
  • 响应头字段 :如 Content-Type(内容类型)、Content-Length(内容长度)、Cache-Control(缓存控制)等。
  • Cookie 及安全信息 :设置 Cookie 或跨域策略(如 Set-CookieCORS)。

6. 发送响应

服务器通过已建立的 TCP 连接将响应数据发送到客户端:

  • 响应头发送:先发送响应头字段;
  • 响应体发送:将请求结果(HTML 页面、JSON 数据等)通过数据包分块发送;
  • 关闭连接:HTTP/1.0 默认关闭连接,HTTP/1.1 默认保持连接(Keep-Alive)。

7. 记录日志的处理过程

服务器会记录每个请求的相关日志,供后续分析和调试:

  • 记录内容

    • 客户端 IP 和请求时间;
    • 请求 URL 和方法;
    • 响应状态码和数据大小;
    • 用户代理(User-Agent)信息。
  • 日志存储 :日志通常存储在文件(如 Apache 的 access.logerror.log)或集中式系统(如 Elasticsearch)。

  • 日志用途

    • 分析流量趋势;
    • 调试错误请求;
    • 检测潜在的攻击行为(如 DDOS)。
相关推荐
Pailugou14 分钟前
使用socket实现TCP服务端
服务器·网络·tcp/ip
Bruce_Liuxiaowei9 小时前
权限维持:操作系统后门技术分析与防护
网络·安全·web安全
利刃大大10 小时前
【高并发服务器:HTTP应用】十六、HttpContext上下文模块 && HttpServer服务器模块&& 服务器测试
运维·服务器·http·高并发·项目
是专家不是砖家10 小时前
rk3562 udp发送带宽500Mbps出现丢包问题
网络·网络协议·udp·rk3562·udp丢包·t507
wanhengidc10 小时前
云手机通常使用什么架构
服务器·网络·安全·游戏·智能手机·云计算
在路上看风景11 小时前
5.1 路由选择算法
网络
xiaoxiongip66612 小时前
假设两个设备在不同网段,网关怎么设置才能通呢
网络·爬虫·python·https·智能路由器
Full Stack Developme12 小时前
java.net.http 包详解
java·http·.net
Li zlun13 小时前
TCP/IP协议:互联网的基石与通信灵魂
网络·网络协议·tcp/ip
SSL店小二13 小时前
IP SSL证书申请全过程及注意事项
服务器·网络·网络协议·https·ssl