【WEB服务器】什么是WEB服务器
一、概述
Web服务器一般指的是“网站服务器”,是某种驻留在因特网上的计算机程序,可以向请求终端提供服务,主要功能时存储、处理和传递网页给“客户”,传递内容一般是HTML文档、图像、样式表或脚本等,也可以放置网站文件以供浏览或下载。
WEB服务器也称为WWW(Word Wide Web)服务器,核心功能就是提供网页信息浏览服务,严格来说Web服务器只负责处理Http协议请求,发送静态页面的内容。
目前主流的web服务器主要是Apache、Nginx、IIS,还有较多使用的Tomcat、Jetty、WebSphere,WebLogic,Kerstrel等。下图为市场占有率历史数据,Apache占有率较高,但是在前1K网站排名中,Nginx占有率最高。
二、Web服务器工作原理
首先要通过TCP协议的三次握手建立与目标Web服务器的连接,然后HTTP协议生成针对目标Web服务器的HTTP请求报文,通过TCP、IP等协议发送到目标Web服务器上。HTTP协议是基于TCP协议的应用层协议,用于用户代理和服务器之间的通信,Web服务器是被动的,只有终端客户发起请求时才会响应。web服务器一般是一次请求一次回应,一问一答的工作方式:
- 用户代理发起资源请求,发起的通常(但不限于)是URL(统一资源标志符,Uniform Resource Identifier),发起动作类型GET/POST/DELETE/PUT等;
- 用户代理解析URL获取目标域名,交由DNS解析(使用者通常提供的是域名或者IP:端口);
- 建立TCP链接完成HTTP协商(完成双方的协议、内容格式、加密等);
- 用户代理把请求的内容封装成HTTP数据包发送给服务器;
- 服务器接收到资源请求后按照之前的协商解包数据;
- 服务器将用户需要的内容打包成HTTP数据包并返回给用户,完成一次工作流程。
1、在应用层HTTP协议的基本过程
http通信通常发生在TCP/IP连接之上,默认使用TCP协议的80端口,也就是说这一过程有:
- 建立连接。通过申请Socket套接字实现,用户打开一个Socket并将其绑定在端口上。
- 发送请求。客户端将请求发送到服务器的监听端口上完成一次请求动作。
- 发送响应。服务器监听请求并处理之后将响应内容消息发回客户端。
- 关闭连接。客户端和服务器双方关闭Socket结束TCP/IP会话。
2、在传输层TCP协议的基本过程
上面也说过HTTP在TCP协议上。客户端和服务器在连接、数据交互过程中需要实现的有:
- 服务器绑定端口&监听端口;
- 客户端发动请求;
- 服务器响应连接请求;
- 建立连接;
- 交互数据,接收或发送;
- 关闭通信结束会话;
以上的2~4的三次握手和6的四次挥手。在2的时候通常包含多客户端的高并发,这也是web服务器关注的重点之一。
三次握手建立连接
四次挥手释放连接
3、Web服务在服务器端的工作原理
Web业务在服务器端主要是在干什么呢?或者说服务器自己需要做哪些事情呢?
- TCP监听端口,以建立和用户代理之间的连接,完成连接后,后续的HTTP请求则不再进入监听直到释放。
- 预处理会先从TCP报文中获取HTTP请求;依据双方协商解密解包等;服务器在依据自生配置进行安全处理。
- 预处理。URL+请求动作来确定用户的资源处理方式,分配到静态或动态资源处理模块。
- 静态资源处理模块负责检索“静态资源”,HTML/JS/CSS/图片/视频等,内容通常为字符流或者字节流。
- 动态资源处理模块运行业务逻辑处理,依据不同条件返回不通内容,内容形式同静态资源。
- 后处理。与预处理类似的发送响应信息前的准备流程。
- 资源输出模块把响应信息封装成HTTP报文扔到TCP中。
说明下,静态资源和动态资源是从服务器处理信息方式或者说是响应请求内容的方式来说的。
静态资源可以简单的理解成文本、HTML、图片、JS等,内容是固定的,无需处理、无需查询数据库就可以直接发给请求者,你要什么我就给什么。
动态资源则是需要服务器程序进行处理,根据不同条件在页面也显示不同的数据,好处就是内容的更新不需要修改页面,缺点就是速度上没有静态资源响应快。客户端在获取动态资源,先将请求交给web的一个存储点,存储点链接数据库,数据库处理数据并发给服务器,服务器再发给客户端渲染展示。
xybf: wok就是这,我调了两个小时[裂开]
做而论道_CS: 用 C 编程,如: i = -125; 。 这语句中的负数:-125;, 是五个 ASCII 码:“-、1、2、5、;”。 把 ASCII 码形式的负数 “-125”, 变成补码 1000 0011, 是怎么变换的? 可以肯定的说:根本就不是取反加一! 原码反码取反加一。。。 可说是:一无是处。
做而论道_CS: 在 C 和 C++ 中编程,只需用到【正负十进制数】。 该数值,存入内存,必定是【补码】。 因此,学习 C 语言,只会遇上【数值和补码】。 绝对不会碰上:原码和反码。 那么,讨论原码和反码,是不是无事生非呢?
做而论道_CS: 同理,求正数的补码,公式则为: 正数的补码 = 256 + 该正数。 要知道,加上 256,就是出现一个进位。 进位必须舍弃,所以,256 就不用加了。 于是有: 正数的补码 = 该正数。 在此处,这就证明了: 零和正数的补码,就该数字本身。 举例,就不用了吧。 计算机专家也是说: 正数的补码,就是其自身。 但是,他们并没有给出任何证明。 他们为什么不证明呢? 因为,这些专家: 不懂什么是进位。 更不懂什么是舍弃进位。 -------------------- 另外,由补码换算到十进制数,也极其简单。 你只需记住:【补码首位的权,是负数】。 一般的八位二进制数,各个位的权是: 128、64、32、16、8、4、2、1; 如果是八位的补码,各个位的权则是: -128、64、32、16、8、4、2、1。 例如,有一个补码:1110 0001, 它代表的十进制是:-128 + 64 + 32 + 1= -31。 再看,另一个补码:0110 0001, 它代表的十进制是:0 + 64 + 32 + 1 = +97。 仅仅使用【进制转换】,不就完事了! ---------------------- 那么,所谓的: 机器数真值符号位原码反补码正数三码与正数相同 负数取反加一符号位不变符号位也参加运算模同余 ... 这一大堆乱七八糟的概念,不都是垃圾嘛! 进位,是小学二年级的知识点吧? 舍弃进位,很难理解吗? 老外竟然能弄出那么大一堆概念! 老外的数学水平,由此可见一斑。 谁要是跟老外学算术,立刻、马上,就掉沟里去了! 我们的计算机老师,也不懂数学,只知道跟风。 一天一天的,在大学里,兜着圈子讲小学的知识。 真是毁人不倦坑人不浅! 这些老师,捡个鞋拔子就当成玉如意了。 天天蒙骗学生,赚取名声和丰厚的讲课费。 顺便再抓几个学生挂科,抖一下威风! 现在知道我们缺芯片用的原因了吧!
做而论道_CS: 所谓的:机器数符号位原码反码 ... 都是计算机专家在【忽悠、卖拐】而已。 所谓的 “补码”,也是正常的数字。 也并非一定是二进制数。 你看十进制吧,两位数:0 ~ 99。 可以有:27 + 99 = (一百) 26 也可以:27 - 1 = 26 如果你忽略进位,依旧保持两位数, 这两种算法的功能,就是相同的! 就是说,当你舍弃了进位: 负数,就能用正数代替; 加法,竟然就能实现减法运算! 在计算机中,舍弃进位,会怎样? 就可以简化硬件。 用一个加法器,便可横行天下! 由此可知,“补码”,根本就不是什么新鲜事。 “补码” 关键,是:【舍弃进位】。 并不是:符号位原码反码取反加一。 -------------------- 用两位十进制运算时,舍弃进位,就是【减去一百】。 那么,加 99,再减 100,当然就是 “-1” 了。 计算机使用的,是二进制数。 八位二进制数是:0000 0000 ~ 1111 1111。 相当于十进制数:0 ~ 255。 如果出现进位 = 1,就是:2^8 = 256。 那么,加 255,再减 256,这也就是 “-1” 了。 所以:+255 (1111 1111),就是:-1; 同理:+254 (1111 1110),就是:-2; +253 (1111 1101),就是:-3; 。。。 。。。 +128 (1000 0000),即:-128。 以上这些正数,就是计算机专家 “发明” 的补码了。 由此可知: 所谓的 “补码”,也是正常的数字。 它与 “符号位原码反码” 也没有任何关系。 之所以能代替负数,关键是【舍弃了进位】。 至此,你肯定能看出关系式: 负数的补码 = 256 + 该负数。 一般化,就是: 负数的补码 = 2^n + 该负数。 n,是二进制数的位数。 例:求-31 的 “补码” 是多少? 解:256-31 = 225 = 1110 0001 (二进制)。 这不就求出来了吗! 哪还用琢磨什么:符号位原码取反。。。!