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

devtools/2024/12/30 1:02:31/

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)。

http://www.ppmy.cn/devtools/146151.html

相关文章

【Go学习】从一个出core实战问题看Go interface赋值过程

0x01 背景 版本中一个同学找我讨论一个服务出core的问题,最终他靠自己的探索解决了问题,给出了初步的直接原因结论,"Go 中 struct 赋值不是原子的”。间接原因的分析是准确的,直接原因,我有点怀疑。当时写了一些…

【OCR】数据集合集!

本文将为您介绍经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 RapidOCR 更新时间:2024-12-24 访问地址: GitHub 描述: 基于 ONNXRuntime、OpenVINO 和 PaddlePaddle 的超棒 OCR 多编程语言工具包。多平台、多语言 OCR 工具…

解决Ubuntu下无法装载 Windows D盘的问题

电脑安装了 Windows 和 Ubuntu 24.04 后,在Ubuntu系统上装载 D盘,发现无法装载错误如下: Error mounting /dev/nvme0n1p4 at /media/jackeysong/Data: wrong fs type, bad option, bad superblock on /dev/nvme0n1p4, missing codepage or h…

【SQL】筛选某一列字段中,截取含有关键词“XX”字段位置的前4个字段,去重后查看字段

最近在查询数据库的一些数据,想要统计表格里有多少公司,发现表格里没有公司这一列,只能从但是有一些标题字段,只能从中筛选。 假设关键词是[公司],我们要在数据库的表格中,找到名为title的列,列…

OCR实践-问卷表格统计

前言 书接上文 OCR实践—PaddleOCROCR实践-Table-Transformer 本项目代码已开源 放在 Github上,欢迎参考使用,Star https://github.com/caibucai22/TableAnalysisTool 主要功能说明:对手动拍照的问卷图片进行统计分数(对应分数…

STM32 IAP技术 bootloader设计

介绍 IAP,即在应用程序内编程,就是在Flash中预留一套升级固件的boot程序,以实现通过串口/CAN总线实现 “程序升级”。 为什么要做这个boot程序?SWD接口不够用吗? 工程师在程序开发调试阶段肯定是用SWD接口,…

IPv6的报头

IPv6报文格式 整个IPv6包包括:基本报头、拓展包头、上层协议 基本报头: 基本报头一共8个字段,固定大小为40字节,每一个IPv6数据包都必须包含包头 Traffic Class:区分服务代码点,和v4的一样用于标识服务类…

无人机巡检大疆智图测绘技术详解

无人机巡检结合大疆智图测绘技术,为巡检工作带来了革命性的变化。以下是对这一技术的详细解析: 一、无人机巡检技术概述 无人机巡检是利用无人机对目标对象或区域进行巡检和监测的一种技术。通过无人机搭载的传感器,如高清相机、红外热像仪…