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

输入url之后发生了什么

1. URL解析

  • 步骤:浏览器解析URL(如https://www.example.com),提取协议(https)、域名、端口(默认443)、路径(/)等。
  • 关键点:非完整URL会补全(如example.comhttps://www.example.com)。
2. DNS域名解析
  • 过程
  1. 浏览器缓存 → 2. 本地Hosts文件 → 3. 本地DNS服务器 →4. 根DNS → 5. 顶级域(.com) → 6. 权威DNS
  • 结果:获取域名对应的IP地址(如93.184.216.34)。
  • 协议:基于UDP的DNS查询(端口53)。
3. 建立TCP连接(三次握手)
  • 目的:确保可靠传输(HTTPS默认端口443)。
  • 流程
  1. 客户端发送SYN=1, seq=x
  2. 服务端回复SYN=1, ACK=1, seq=y, ack=x+1
  3. 客户端发送ACK=1, seq=x+1, ack=y+1
  • 结果:建立双向通信通道。
4. TLS/SSL握手(HTTPS)
  • 目的:加密传输(以RSA算法为例):
  1. 客户端发送支持的加密套件 + 随机数A →
  2. 服务端返回证书 + 选择的加密套件 + 随机数B →
  3. 客户端验证证书(CA签名、有效期、域名匹配)→
  4. 用证书公钥加密Pre-Master Secret发送 →
  5. 双方通过随机数A/B和Pre-Master生成会话密钥 →
  6. 开始对称加密通信(如AES-256)。
5. 发送HTTP请求
  • 请求报文
GET / HTTP/1.1
Host: www.example.com
User-Agent: Chrome/91.0
Accept: text/html
Cookie: session_id=abc123
  • 关键字段
  • Host:虚拟主机支持(一个IP多个网站)
  • Cookie:携带会话状态
6. 服务器处理请求
  • 步骤
  1. Web服务器(如Nginx)接收请求 →
  2. 静态资源直接返回,动态请求转发给后端(如Python/Django) →
  3. 数据库查询(如MySQL)→ 生成HTML响应。
  • 可能优化
  • CDN缓存静态资源
  • 负载均衡(如AWS ALB)
7. 接收HTTP响应
  • 响应报文
HTTP/1.1 200 OK
Server: nginx/1.18.0
Content-Type: text/html
Set-Cookie: new_session=xyz456
Content-Length: 1234<!DOCTYPE html><html>...</html>
  • 状态码
  • 200:成功
  • 301/302:重定向
  • 404:资源不存在
  • 500:服务器错误
8. 浏览器解析渲染
  1. HTML解析:构建DOM树
  2. CSS解析:生成CSSOM树
  3. JavaScript执行:可能阻塞渲染(async/defer优化)
  4. 渲染树(Render Tree):结合DOM和CSSOM
  5. 布局(Layout):计算元素位置/大小
  6. 绘制(Paint):像素级渲染
9. 连接释放(四次挥手)
  • 流程
  1. 客户端发送FIN=1, seq=u
  2. 服务端回复ACK=1, ack=u+1
  3. 服务端发送FIN=1, seq=v
  4. 客户端回复ACK=1, ack=v+1
  • 结果:双方释放连接资源。
10. 关键协议与角色

环节

协议/技术

设备/组件

域名解析

DNS (UDP 53)

本地DNS服务器

传输层

TCP (可靠传输)

操作系统协议栈

安全加密

TLS/SSL (如RSA/AES)

服务器证书

应用层

HTTP/1.1 或 HTTP/2

Web服务器(Nginx/Apache)

内容分发

CDN (边缘节点缓存)

Akamai/Cloudflare

通俗比喻
  1. DNS解析:像查通讯录,把朋友名字(域名)变成电话号码(IP)。
  2. TCP握手:打电话时的“喂-喂-听得到吗”确认过程。
  3. HTTPS加密:两人用密码本(会话密钥)对话,即使被窃听也看不懂。
  4. 渲染页面:收到乐高说明书(HTML)后,按步骤拼装成模型。

总结:从URL到页面展现,是DNS寻址 → TCP建联 → 加密协商 → 请求/响应 → 渲染的精密协作过程,涉及网络各层协议协同工作。

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

相关文章:

  • c++ STL---vector使用
  • 为什么 C++ 11 引入了 `nullptr`
  • day037-openssh服务与http协议
  • 2025实时数据同步:多平台商品信息接口的高效更新技术解析
  • jquery 赋值时不触发change事件解决——仙盟创梦IDE
  • Python——PyQt5初体验
  • LVS 负载均衡群集
  • LeetCode | 二分法题型详解+图解
  • bos_token; eos_token; pad_token是什么
  • QSqlDatabase: QSQLITE driver not loaded
  • infinisynapse 使用清华源有问题的暂时解决方法:换回阿里云源并安装配置PPA
  • LoRA 浅析
  • Python Beautiful Soup 4【HTML/XML解析库】 简介
  • StableDiffusion实战-手机壁纸制作 第一篇:从零基础到生成艺术品的第一步!
  • Hexo 个人博客配置记录(GitHub Pages + Butterfly 主题 + Waline 评论 + 自动部署)
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 职坐标IT培训:嵌入式AI物联网开源项目精选
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 【图像处理入门】11. 深度学习初探:从CNN到GAN的视觉智能之旅
  • 跟着AI学习C# Day22
  • 实时输出subprocess.Popen运行程序的日志
  • 永磁同步电机无速度算法--基于正切函数锁相环的滑模观测器
  • 【鸿蒙HarmonyOS Next App实战开发】​​​​ArkUI纯色图生成器
  • VACM 详解:SNMPv3 的访问控制核心
  • 回溯----8.N皇后
  • C++ std::set的用法
  • 根据图片理解maven
  • FocalAD论文阅读
  • SpringBoot 应用开发核心分层架构与实战详解
  • SpringBoot电脑商城项目--修改默认收货地址