哎哟喂?这不就是我辛辛苦苦准备的答案么?网上博客到的答案?在这里,我要diss一些所谓的“大牛”博客主,你写的东西就是垃圾,你抄我,我抄你,你自己写的东西都不看,然后误导别人,流下的愤青的泪水,这。。。。不扯了,看看到底怎么回答才对
以下各节说明了物理键盘操作和操作系统中断。当您按下键“ g”时,浏览器会接收到该事件,并且自动完成功能会启动。根据浏览器的算法以及您是否处于私密/隐身模式,是否会在下方的下拉菜单中为您提供各种建议网址栏。这些算法大多数都基于整个网络中的搜索历史,书签,Cookie和热门搜索对结果进行排序和优先级排序。在您输入“ google.com”时,会运行许多代码块,并且每次按键都会完善建议。在您完成输入之前,它甚至可能会建议“ google.com”。
要选择零点,让我们选择键盘上敲击范围底部的Enter键。此时,回车键专用的电路(直接或电容性)闭合。在这种情况下,这允许少量电流流入键盘的逻辑电路,该逻辑电路扫描每个键开关的状态,消除快速间歇性闭合开关的电噪声,并将其转换为键码整数13.然后,键盘控制器对键码进行编码,以传输到计算机。现在,这几乎普遍通过通用串行总线(USB)或蓝牙连接进行,但历史上一直通过PS / 2或ADB连接进行。
对于USB键盘:
对于虚拟键盘(如在触摸屏设备中):
screen controller
随后引发中断报告按键的坐标。键盘在其中断请求线(IRQ)上发送信号,该中断请求线interrupt vector
由中断控制器映射到(整数)。CPU使用Interrupt Descriptor Table
(IDT)将中断向量映射到interrupt handlers
内核提供的函数()。当中断到达时,CPU用中断向量索引IDT并运行适当的处理程序。这样就进入了内核。
WM_KEYDOWN
消息发送到该应用程序HID传输将密钥按下事件传递给KBDHID.sys
驱动程序,该驱动程序将HID用法转换为扫描代码。在这种情况下,扫描代码为 VK_RETURN
(0x0D
)。该KBDHID.sys
驱动程序与KBDCLASS.sys
(键盘类驱动程序)接口 。该驱动程序负责以安全的方式处理所有键盘和小键盘输入。然后,它调用 Win32K.sys
(可能在将消息通过安装的第三方键盘过滤器传递之后)。这一切都发生在内核模式下。
Win32K.sys
通过GetForegroundWindow()
API 找出哪个窗口是活动窗口 。该API提供了浏览器地址框的窗口句柄。然后,主Windows“消息泵”会调用 SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam)
。lParam
是一个位掩码,指示有关按键的更多信息:重复计数(在这种情况下为0),实际扫描代码(可以取决于OEM,但通常不用于VK_RETURN
),是否扩展键(例如alt,shift,ctrl)也被按下(没有),以及其他一些状态。
Windows SendMessage
API是一种简单易用的功能,可将消息添加到特定窗口句柄(hWnd
)的队列中。稍后,将调用WindowProc
分配给的主要消息处理功能(称为)hWnd
以处理队列中的每个消息。
hWnd
处于活动状态的窗口()实际上是一个编辑控件, WindowProc
在这种情况下,它具有消息的消息处理程序WM_KEYDOWN
。该代码在传递给SendMessage
(wParam
)的第3个参数内查找,因为它VK_RETURN
知道用户已按ENTER键。
KeyDown
NSEvent发送到应用程序中断信号在I / O Kit kext键盘驱动程序中触发一个中断事件。驱动程序将信号转换为键码,然后传递给OS X WindowServer
进程。结果,WindowServer
分派事件通过它们的Mach端口将事件分配到任何适当的应用程序(例如,活动或监听),并将其放入事件队列中。然后,具有足够特权的线程可以调用此mach_ipc_dispatch
函数从该队列中读取事件 。这最常发生通过,并且由一个处理NSApplication
主事件循环通过,NSEvent
的 NSEventType
KeyDown
。
当使用图形时X server
,X
将使用通用事件驱动程序evdev
来获取按键。使用X server
特定的键映射和规则将键代码重新映射为扫描代码。按下键的扫描代码映射完成后,X server
会将字符发送到window manager
(DWM,metacity,i3等),因此 window manager
依次将字符发送到焦点窗口。接收字符的窗口的图形API在适当的焦点字段中打印适当的字体符号。
现在,浏览器在URL(统一资源定位器)中包含以下信息:
Protocol
“ http”使用“超文本传输协议”
Resource
“ /”检索主(索引)页面
如果未提供协议或有效域名,浏览器将继续将地址栏中提供的文本输入浏览器的默认网络搜索引擎。在许多情况下,URL后面会附加一段特殊的文字,以告诉搜索引擎它来自特定浏览器的URL栏。
a-z
, A-Z
,0-9
,-
,或.
。google.com
不存在,因此如果没有,浏览器会将Punycode编码应用于URL的主机名部分。gethostbyname
库函数(因操作系统而异)进行查找。gethostbyname
在尝试通过DNS解析主机名之前,检查主机名是否可以通过本地hosts
文件中的引用解析(其位置因OS而异)。gethostbyname
没有缓存它,也无法在hosts
文件中找到它,那么它将向网络堆栈中配置的DNS服务器发出请求。这通常是本地路由器或ISP的缓存DNS服务器。ARP process
以下DNS服务器。ARP process
以下默认网关IP。为了发送ARP(地址解析协议)广播,网络堆栈库需要目标IP地址进行查找。它还需要知道用于发送ARP广播的接口的MAC地址。
首先检查ARP缓存中是否有目标IP的ARP条目。如果它在高速缓存中,则库函数返回结果:目标IP = MAC。
如果该条目不在ARP缓存中:
ARP Request
:
发件人MAC:接口:mac:地址:此处
发件人IP:interface.ip.goes.here
目标MAC:FF:FF:FF:FF:FF:FF(广播)
目标IP:target.ip.goes.here
根据计算机和路由器之间的硬件类型:
直接连接:
ARP Reply
(请参阅下文)毂:
ARP Reply
(见下文)。开关:
ARP Reply
(见下文)ARP Reply
:
发件人MAC:target:mac:address:here
发件人IP:target.ip.goes.here
目标MAC:接口:mac:地址:此处
目标IP:interface.ip.goes.here
现在,网络库具有我们的DNS服务器或默认网关的IP地址,它可以恢复其DNS进程:
一旦浏览器收到目标服务器的IP地址,它将从URL获取该地址和给定的端口号(HTTP协议默认为端口80,HTTPS为端口443),并调用名为socket
和的系统库函数。请求一个TCP套接字流- AF_INET/AF_INET6
和 SOCK_STREAM
。
此时,数据包已准备好通过以下任一方式进行传输:
对于大多数家庭或小型企业的Internet连接,数据包将从您的计算机经过本地网络,然后再通过调制解调器(MOdulator / DEModulator)传递,该调制解调器将数字1和0转换为适合通过电话,电缆,或无线电话连接。在连接的另一端,是另一个调制解调器,该调制解调器将模拟信号转换回数字数据,以供下一个网络节点处理,在该网络节点中,将进一步分析from和to地址。
大多数大型企业和一些较新的住宅连接将具有光纤或直接以太网连接,在这种情况下,数据保持数字状态,并直接传递到下一个网络节点进行处理。
最终,数据包将到达管理本地子网的路由器。从那里,它将继续行进到自治系统(AS)边界路由器,其他AS,最后到达目标服务器。途中的每个路由器都将从IP标头中提取目标地址,并将其路由到适当的下一跳。对于每个经过的路由器,IP报头中的生存时间(TTL)字段将减一。如果TTL字段达到零或当前路由器的队列中没有空间(可能是由于网络拥塞),则该数据包将被丢弃。
该发送和接收在TCP连接流之后多次发生:
服务器收到SYN,并且心情愉快:
客户端通过发送数据包确认连接:
数据传输如下:
要关闭连接:
ClientHello
使用其传输层安全性(TLS)版本,密码算法列表和可用压缩方法向服务器发送消息。ServerHello
以TLS版本,选定的密码,选定的压缩方法以及由CA(证书颁发机构)签署的服务器公共证书的形式向客户端回复消息。该证书包含一个公共密钥,客户端将使用该公共密钥来加密其余的握手,直到可以同意对称密钥为止。Finished
消息发送到服务器,并使用对称密钥对到目前为止的传输哈希进行加密。Finished
客户端发送自己的消息,该消息也使用对称密钥进行了加密。如果使用的网络浏览器是Google编写的,则不会发送HTTP请求以检索页面,而是发送请求以尝试与服务器协商从HTTP“升级”到SPDY协议。
如果客户端使用的是HTTP协议并且不支持SPDY,则它将以下格式的请求发送到服务器:
GET / HTTP / 1.1
主持人:google.com
连接方式:关闭
[其他标题]
其中,[other headers]
是指一系列按HTTP规范格式化并以单行换行分隔的冒号分隔的键/值对。(这假定使用的Web浏览器没有违反HTTP规范的错误。这也假定Web浏览器正在使用HTTP/1.1
,否则它可能不包含Host
请求中的标头,并且请求中指定的版本GET
将为HTTP/1.0
或HTTP/0.9
)
HTTP / 1.1为发送方定义了“关闭”连接选项,以指示响应完成后将关闭连接。例如,
连接方式:关闭
不支持持久连接的HTTP / 1.1应用程序必须在每条消息中都包含“关闭”连接选项。
发送请求和标头后,Web浏览器将单个空白换行符发送到服务器,指示请求的内容已完成。
服务器以表示请求状态的响应代码进行响应,并以以下形式的响应进行响应:
200 OK
[响应头]
紧跟一个换行符,然后发送的HTML内容的有效负载 www.google.com
。然后,服务器可以关闭连接,或者如果客户端发送的标头请求连接,则保持连接打开以重新用于其他请求。
如果由网络浏览器发送的HTTP标头包含足够的信息,以便网络服务器确定自上次检索以来是否已对网络浏览器缓存的文件的版本进行了修改(即,如果网络浏览器包含ETag
标头),则可能而是以以下形式的请求进行响应:
304未修改
[响应头]
而且没有有效载荷,Web浏览器会从其缓存中检索HTML。
解析HTML之后,Web浏览器(和服务器)GET / HTTP/1.1
会对HTML页面引用的每个资源(图像,CSS,favicon.ico等)重复此过程,但请求 不是GET /$(URL relative to www.google.com) HTTP/1.1
。
如果HTML引用的资源与不在另一个域上 www.google.com
,则Web浏览器将返回到解析另一个域所涉及的步骤,并针对该域执行到此为止的所有步骤。Host
请求中的标头将设置为适当的服务器名称,而不是google.com
。
HTTPD(HTTP守护程序)服务器是在服务器端处理请求/响应的服务器。最常见的HTTPD服务器是Linux的Apache或nginx和Windows的IIS。
服务器将请求分解为以下参数:
GET
,HEAD
,POST
,PUT
, PATCH
,DELETE
,CONNECT
,OPTIONS
,或TRACE
)。如果直接在地址栏中输入网址,则为GET
。服务器向浏览器提供资源(HTML,CSS,JS,图像等)后,将执行以下过程:
浏览器的功能是通过从服务器请求并在浏览器窗口中显示它来显示您选择的Web资源。该资源通常是HTML文档,但也可以是PDF,图像或某些其他类型的内容。用户使用URI(统一资源标识符)指定资源的位置。
浏览器解释和显示HTML文件的方式在HTML和CSS规范中指定。这些规范由W3C(万维网联盟)组织维护,该组织是Web的标准组织。
浏览器用户界面有很多共同点。常见的用户界面元素包括:
浏览器高级结构
浏览器的组件为:
呈现引擎开始从网络层获取请求的文档的内容。通常以8kB的块完成。
HTML解析器的主要工作是将HTML标记解析为解析树。
输出树(“分析树”)是DOM元素和属性节点的树。DOM是文档对象模型的缩写。它是HTML文档的对象表示形式,是HTML元素与JavaScript之类的外界接口。树的根是“文档”对象。在通过脚本进行任何操作之前,DOM与标记几乎具有一对一的关系。
解析算法
无法使用常规的自上而下或自下而上的解析器来解析HTML。
原因如下:
浏览器无法使用常规的解析技术,因此无法使用自定义解析器来解析HTML。HTML5规范详细描述了解析算法。
该算法包括两个阶段:令牌化和树构建。
解析完成时的操作
浏览器开始获取链接到页面的外部资源(CSS,图像,JavaScript文件等)。
在此阶段,浏览器将文档标记为交互式文档,并开始解析处于“延迟”模式的脚本:应在解析文档后执行的脚本。文档状态设置为“完成”,并触发“加载”事件。
请注意,HTML页面上绝不会出现“无效语法”错误。浏览器会修复所有无效内容,然后继续。
标签内容和style
属性值StyleSheet object
,其中每个对象都包含带有选择器的CSS规则和与CSS语法相对应的对象。floated
,位置absolutely
或relatively
或使用其他复杂特征时,将采取更复杂的步骤。有关 更多详细信息,请参见 http://dev.w3.org/csswg/css2/和http://www.w3.org/Style/CSS/current-work。CPU
或图形处理器GPU
。GPU
用于图形渲染计算时,图形软件层将任务分成多个部分,因此它可以利用GPU
大规模并行性来进行渲染过程所需的浮点计算。渲染完成后,由于某种计时机制(例如Google Doodle动画)或用户交互(将查询键入搜索框并接收建议),浏览器将执行JavaScript代码。诸如Flash或Java之类的插件也可以执行,尽管目前不在Google主页上。脚本可以导致执行其他网络请求,以及修改页面或其布局,从而导致另一轮页面渲染和绘画。