首页 技术 正文
技术 2022年11月22日
0 收藏 586 点赞 2,606 浏览 1459 个字

一、 输入URL,回车

  • 敲击某个键时,键盘内的处理器会先对键矩阵进行分析,然后将数据发送到计算机
  • 计算机接收到来自键盘的信号,由键盘控制器(一种集成电路)进行处理,发送给操作系统
  • 操作系统会分析,这些数据是否为系统命令,若不是,则将数据传给应用程序。
  • 应用程序会分析这些数据是否为命令,如果不是命令,则会将数据作为内容接受,否则忽略

二、浏览器解析URL

  1. 浏览器会对URL进行检查,是否合法,如果不合法会将输入内容传给默认的搜索引擎
  2. 针对当前URL检查是否存在本地缓存,如果有缓存就直接跳过请求阶段,从缓存中去取资源
浏览器再得到URL后,调用Socket,使用TCP协议,HTTP请求会被封装,加入本地端口,目标端口等信息
IP地址是在IP协议中被封装的。但光有IP地址是不够的,因为设备是可以移动的,IP地址并不与设备绑定。所以还有一个MAC要被封装,每个网卡的MAC地址都是固定且唯一的

三、DNS解析

DNS实际上是一个域名与IP对应的数据库,DNS解析主要是为了获取到域名对应的IP,用于下一步的连接建立

DNS的解析会按照以下顺序尝试获取IP,任意一步找到直接返回IP:

1. 查询浏览器缓存,浏览器会对最近访问的地址的DNS进行缓存,例如chrome对每个域名会默认缓存60s
2. 检查系统缓存,也就是hosts文件中配置的域名与IP的对应关系
3. 获取路由器的DNS缓存
4. 查询ISP服务商DNS缓存,即本地服务器缓存
5. 最后手段:递归查询,以 根域名服务器 --> 顶级域名服务器 --> 极限域名服务器 的顺序搜索对应域名的IP

通过Socket API发送数据,可以选择TCP或UDP协议

1. Socket(套接字)是计算机之间进行通信的一种约定或一种方式
2. 在应用层和传输层之间的一个抽象层
3. 它把TCP/IP层复杂的操作抽象为几个简单的接口
4. 供应用层调用已实现进程在网络中通信

三、建立连接;

根据上一步获取到的IP地址定位到目标主机,开始于其建立TCP连接,也就是三次握手建立连接:

  1. 第1次握手:客户端向服务器端发送请求(SYN=1)等待服务器确认;
  2. 第2次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1);
  3. 第3次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。

四、服务器如何处理数据并返回数据

用上一步建立的连接发送http request请求命令和请求头信息

服务器收到信息都会返回应答头信息

五、关闭TCP连接,

  • http1.1已经支持keep-alive
  • 根据Connection请求头,如果是keep-alive服务器就保持住tcp连接
  • response传输完后主动关闭tcp连接。
  • 当然现在浏览器都是http1.1都默认是keep-alive的,在浏览器tab关闭时,tcp连接关闭。

六、检查状态码

如果response的状态码出现3XX(跳转),未授权(401),错误(4XX和5XX)会有不同的处理。

七、准备呈现

如果response status 为304(内容未更改)浏览器则会从本来缓存加载内容进行呈现

八、 浏览器如何处理服务器的响应

通过MIME类型,浏览器知道要用页面渲染引擎来处理HTML文件,整个渲染过程都由浏览器来处理,主要分为以下步骤:

  1. 解析资源文件(html)的源代码,构建出一个DOM树
  2. 解析CSS,形成css对象模型CSSOM,其中非法的css会直接被忽略掉
  3. 利用DOM和CSSOM构建一个渲染树
  4. 根据渲染树直接把页面绘制到浏览器窗口中

根据网络模型来的过程

应用层

HTTP、DNS

传输层

TCP/UDP

三网络层

IP

链路层

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849