Web服务器⼯作原理详解(基础篇)
概述:Web服务器概念较为⼴泛,我们最常说的Web服务器指的是⽹站服务器,它是建⽴在Internet之上并且驻留在某种计算机上的程序。Web服务器可以向Web客户端(如浏览器)提供⽂档或其他服务,只要是遵循HTTP协议⽽设计的⽹络应⽤程序都可以是Web客户端。
Web服务器和HTTP服务器可以说是同⼀个东西,当然⾮得细分的话,HTTP服务器是建⽴在HTTP协议之上的提供⽂档浏览的服务器,更多的是提供静态的⽂件。⽽Web服务器涵盖了HTTP服务器(这⼀点可以⾃⾏百度百科), Web服务器不仅能够存储信息,还能在⽤户通过Web浏览器提供的信息的基础上运⾏脚本和程序。
Web服务器 约等于 HTTP服务器 + 其他服务
⽬前所熟知的Web服务器有很多,其最主流的是 Apache, Nginx, IIS
各⼤Web服务器的实现细节都不同,是为了某种情形⽽设计开发的。但是它们的基础⼯作原理是相同的,这也是本次基础篇所讲解的内容。⼀、Web服务器⼯作原理图解
⾸先我们暂时不考虑HTTP协议的各种请求⽅式,我们先跟着**(Web服务器⼯作原理总体描述01)这张图,将⼀次Web服务的⼯作流程过⼀遍,我们假设以浏览器作为客户端
(1) ⽤户做出了⼀个操作,可以是填写⽹址敲回车,可以是点击链接,可以是点击按键等,接着浏览器获取了该事件。
(2) 浏览器与对端服务程序建⽴TCP连接。
(3) 浏览器将⽤户的事件按照HTTP协议格式**打包成⼀个数据包,其实质就是在待发送缓冲区中的⼀段有着HTTP协议格式的字节流。
(4) 浏览器确认对端可写,并将该数据包推⼊Internet,该包经过⽹络最终递交到对端服务程序。
(5) 服务端程序拿到该数据包后,同样以HTTP协议格式解包,然后解析客户端的意图。
(6) 得知客户端意图后,进⾏分类处理,或是提供某种⽂件、或是处理数据。
(7) 将结果装⼊缓冲区,或是HTML⽂件、或是⼀张图⽚等。
(8) 按照HTTP协议格式将(7)中的数据打包
(9) 服务器确认对端可写,并将该数据包推⼊Internet,该包经过⽹络最终递交到客户端。
(10) 浏览器拿到包后,以HTTP协议格式解包,然后解析数据,假设是HTML⽂件。
(11) 浏览器将HTML⽂件展⽰在页⾯
以上为Web服务器⼯作基本原理。其实不难发现,这仅仅只是⼀个简单的⽹络通信。我们应该深信,作为⼀个服务器,其根本的⼯作⽆⾮有三个
1. 接收数据
2. 发送数据
3. 数据处理
⽽Web服务器的本质就是 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据
⾼级的服务器⽆⾮就是将这三个部分更加细致的设计了。
⼆、Web服务器之提供静态⽂件⼯作原理图解
Web服务器最主要的功能是提供静态的⽂件。⽇常的上⽹浏览⼤多是⽹页浏览,少数时候才会有⼀些数据的提交操作。因此,我们结合上⼀张图⽰来重点讲解在GET请求下的Web服务器⼯作原理。
其他流程基本不变,着重在于红⾊与蓝⾊部分。
(1) 当⽤户点击⼀个⽹页链接或浏览器加载⼀些资源(css,jpg …)时产⽣。
(6) 服务程序解包后,确定其为GET请求,并且是对该服务器上的某⼀资源的请求。⾸先服务程序会去确认该路径是否存在,再确定该路径的⽂件是否可以获取。
(7-1) 如果请求的路径有误,或者该资源不能被⽤户获取,则返回错误提⽰页⾯。很多服务器的错误页
⾯只有404,更专业的应该是将错误分类并返回对应的错误代码页⾯。
(7-2) 如果该路径合法且⽂件可以被获取,那么服务程序将根据该⽂件类型进⾏不同的装载过程,记录其类型作为(8)中HTTP协议中对应的返回类型,并加⼊响应头。
假设以点击⼀个页⾯链接为例,浏览器⾸先将HTML⽂件请求过来,再以同样的流程对HTML⽂件中包含的资源⽂件路径进⾏依次请求。
三、Web服务器之数据提交⼯作原理图解
仅仅只是⽹页的浏览并不能满⾜所有⼈的需求,客户端与服务器应当是有数据交互的。
即使单⽅⾯的资源请求任然是⽹络的主⼒军。
我们应该清楚的知道,数据提交对于⽤户来说有什么作⽤。
(1) 资源上传 (2) 登陆验证 (3) API接⼝调⽤ (4) 远程指令等
数据提交使得⽤户的操作性有了质的飞跃,它使得HTTP短连接获取静态⽂件的⽅式提升到了动态交互的层次上。该性质也催化出各式各样的编程语⾔、框架。例如PHP,JavaWeb。
如果你留意⽬前主流的那些⼤型服务器,你会发现再⾼级再⽜逼的东西实际是也是最基础的东西建造的。那么我们还可以顺便学习⼀下最古⽼的动态技术CGI
web服务器主要提供什么服务其他流程基本不变,着重在于红⾊与蓝⾊部分。
(1) ⽤户提交数据,假设⽤户点击⼀个按键提交填好的信息。在(3)中将以POST格式写⼊,并填⼊提交⾄服务端的可执⾏程序的路径。
(6) 服务端将参数与该CGI绑定,复制进程,⽤管道传递参数和接收结果
(7) ⼦进程执⾏CGI,接收(6)⽗进程传来的参数,运算完成返回结果。
最后⽗进程将结果装⼊静态模板⽂件,放⼊缓冲区
四、动态技术
我们得明⽩,Web服务器是以短连接为主,并且获取的数据到达浏览器的那⼀刻⼀定是静态的不变的。那么所谓动态实际是指两种情况
1. 服务端产⽣:
(1) ⽤户POST提交数据到某个程序,程序根据该数据作为参数运⾏,得出结果并装⼊静态的模板页⾯中,返回该静态页⾯。但对于⽤
户来说,同⼀个页⾯,做了⼀个操作后数据不⼀样了。好了,这就是动态页⾯。(CGI原理)
(2) PHP的原理是,⽤户GET请求⼀个php后缀的⽂件,服务器先执⾏该php后缀⽂件中的PHP代码,将结果填⼊代码的位置,再返
回。当然也可以提交数据参与运算再返回。
2. 客户端产⽣:
(1) ⽤户GET请求⼀个JavaScript⽂件,服务端不做任何运算返回该静态⽂件。浏览器收到该JS⽂件,在本地执⾏并更新页⾯。
(2) ⽤户POST提交数据到服务端,服务端根据该提交的数据指令返回静态⽂件,浏览器收到后执⾏并更新。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论