当前位置: 首页 > news >正文

当你在浏览器输入一个地址

你在浏览器中输出了一个地址,回车后,一直到显示页面,中间经历了哪些过程 ?

1. 用户输入 URL 并按下回车

  • 用户在浏览器的地址栏中输入一个 URL(例如 http://example.com)并按下回车键。

2. DNS 解析

  • 浏览器检查本地缓存中是否有该域名对应的 IP 地址。
  • 如果本地缓存没有,浏览器会向本地 DNS 服务器(通常是由 ISP 提供)发送 DNS 查询请求。
  • 本地 DNS 服务器查找该域名的 IP 地址,如果找不到,会递归查询上级 DNS 服务器,直到找到对应的 IP 地址。
  • 找到 IP 地址后,DNS 服务器将其返回给浏览器。

3. 建立 TCP 连接

  • 浏览器使用之前获得的 IP 地址,通过 TCP/IP 协议与目标服务器建立连接。
  • 浏览器向服务器的默认端口(通常是 80 或 443)发送 TCP SYN 请求,开始三次握手过程:
    1. 浏览器发送 SYN 包。
    2. 服务器收到 SYN 包后,回复 SYN-ACK 包。
    3. 浏览器收到 SYN-ACK 包后,回复 ACK 包,三次握手完成,TCP 连接建立。

4. 发送 HTTP 请求

  • TCP 连接建立后,浏览器向服务器发送 HTTP 请求:
    • 请求行(Request Line):包含请求方法(GET、POST 等)、请求 URL 和 HTTP 版本。
    • 请求头(Headers):包含浏览器的各种信息,如 User-Agent、Accept、Host 等。
    • 请求体(Body):在 GET 请求中通常为空,在 POST 请求中包含提交的数据。

5. 服务器处理请求

  • 服务器收到请求后,根据请求的 URL 和其他信息,进行处理。
  • 服务器可能需要:
    • 读取静态资源(如 HTML、CSS、JavaScript 文件等)。
    • 调用后台程序(如 PHP、Python、Java 等)生成动态内容。
    • 查询数据库以获取数据。
  • 处理完成后,服务器将生成 HTTP 响应。

6. 服务器发送 HTTP 响应

  • HTTP 响应包含以下部分:
    • 状态行(Status Line):包含 HTTP 版本、状态码(如 200 OK、404 Not Found 等)。
    • 响应头(Headers):包含服务器信息、内容类型、内容长度等。
    • 响应体(Body):包含请求的实际内容(如 HTML 页面、图像等)。

7. 浏览器接收响应并渲染页面

  • 浏览器接收到服务器的响应后,开始解析 HTML 内容。
  • 浏览器根据 HTML 内容,逐步下载并解析嵌入的资源(如 CSS、JavaScript、图像等)。
  • 浏览器构建 DOM 树(Document Object Model)和 CSSOM 树(CSS Object Model),结合成渲染树(Render Tree)。
  • 浏览器根据渲染树进行布局计算,将元素放置在正确的位置。
  • 浏览器绘制页面,将内容显示在屏幕上。

8. 执行 JavaScript 和动态更新页面

  • 浏览器继续解析并执行嵌入的或外部引用的 JavaScript 代码。
  • JavaScript 代码可能进行 DOM 操作或通过 AJAX 请求获取更多数据,动态更新页面内容。

总结

整个过程涉及 DNS 解析、TCP 连接、HTTP 请求和响应、页面解析和渲染、JavaScript 执行等多个步骤。每个步骤都可能涉及多个底层协议和技术细节,共同确保用户最终能够看到完整的网页。

在这里插入图片描述

http://www.lryc.cn/news/382238.html

相关文章:

  • JSP基础知识概述
  • 国产编程—— 仓颉
  • 0X JavaSE-并发编程(锁)
  • 云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)
  • Flask-cache
  • 【面试题】面试小技巧:如果有人问你 xxx 技术是什么?_面试问你对什么技术特别了解
  • 简单分享Python语言(发现其实并不难)
  • 基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建
  • 【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测
  • 【面试题】前端 移动端自适应?_前端移动端适配面试题
  • 在Maven工程中手动配置并测试SpringBoot(巨详)
  • c# 去掉字符串首尾的 特殊符号
  • 在容器中共享本地文件
  • Java Matcher类方法深度剖析:查找和匹配、索引方法
  • Redis-数据类型-zset
  • 手撕RPC——前言
  • Vite: 关于预构建的毫秒级响应
  • Docker 中 MySQL 迁移策略(单节点)
  • 猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests
  • 开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边及循环遍历文件夹全量压缩图片
  • 【数据结构与算法 经典例题】使用栈实现队列(图文详解)
  • 不知大家信不信,竟有这么巧的事,我领导的老婆,竟然是我老婆的下属,我在想要不要利用下这层关系,改善下领导对我的态度,领导怕老婆
  • 使用pkg -r 命令选项向jail虚拟子系统里安装软件@FreeBSD
  • Go语言开发框架GoFly已集成数据可视化大屏开发功能,让开发者只专注业务开发,本文指导大家如何使用
  • PR模板 | RGB特效视频标题模板Titles | MOGRT
  • python替换文件内容
  • SD-WAN是什么?它有哪些应用领域?
  • PHP-CGI的漏洞(CVE-2024-4577)
  • 人工智能前沿讲座——AIGC
  • CCF 第33次CCF计算机软件能力认证第二题