一个Web Server的基本要素(基础篇)

web网络安全——网站入侵(二) 成功例子分析(主要介绍非技术渗透步骤):某学院(难度很小的一类学校) http://XX.XX.XX.XX/ 1) 查看网站框架:chrome F12抓包分析:根据抓包Header中会有一部分网站信息, 网站框架:VWebServer/6.0.0 Apache Tomcat/6.0.29 6.0.43(后续查看网页源代码,报错页面显示信息) 2) 查看网页源代码: 注释:Cust 阅读详情

什么是Web Server

Web Server 就是一个服务器软件,或者是运行这个服务器软件的硬件。通过HTTP协议与客户端通信,可以接收、存储、处理来自客户端的HTTP请求,并做出HTTP响应,返回客户端请求的资源。

用户如何与服务器通信

用户通常使用web浏览器来与Web Server进行通信,在浏览器键入域名或者ip加端口,李兰器就会解析域名成ip地址或者直接根据ip地址对服务器发送http请求,期间要进行tcp的三次握手建立连接。

服务器如何接收用户请求

服务器通过socket监听来自用户的请求。要经过创建socket、配置地址、绑定地址和端口(bind)、开启监听(listen)、接收连接(accept)等几个步骤。
接收连接之后,需要分配一个逻辑单元来处理连接请求,同时还需要继续监听其他请求。在这里可以使用io多路复用以线程池提高并发处理请求的效率。

服务器要处理的三类事件

IO事件、信号及定时事件。
有两种处理事件的模式:Reactor和Proactor。
Reactor模式要求主线程只负责监听文件描述符是否有事件发生(可读、可写),若有,就通知工作线程(逻辑单元),将socket可读可写事件放入请求对列,交给工作线程。
Proactor模式将所有的IO操作都交给主线程和内核处理,工作线程只负责处理逻辑。主线程完成读取完成后,选择一个工作线程来处理客户请求。

作为服务器开发者,需要掌握linux下的三种IO复用方式,select、poll、epoll,以及同步IO和异步IO的区别。

linux的三种系统调用

对于select和poll,所有文件描述符都是在用户态被加入文件描述符集合里的。每次调用都需要将整个集合拷贝到内核态。epoll则将整个文件描述符结合维护在内核态,每次添加文件描述符都只需要一个系统调用。

select使用线性表描述文件描述符集合,文件描述符有上限,poll使用链表来描述文件描述符集合。epoll底层通过红黑树来描述,并维护一个ready_list,将事件表中已就绪文件添加到ready_list中,使用epoll_wait仅观察ready_list中有无数据。

select和poll最大的开销来自内核判断文件描述符就绪这一过程,每次执行select和poll调用时,他们会遍历整个文件描述符集合去判断每个文件描述符是否就绪。epoll在有文件描述符就绪时会以自动触发回调函数,将就绪的文件描述符加入ready_list 中,等待epoll_wait获取。

select和poll都只能工作在相对低效的LT模式下,epoll同时支持LT和ET模式。

综上,当监听的文件描述符较少时,建议用select和poll,当监听的文件描述符较多且活跃的较少时,建议使用epoll

LT(电平触发),去遍历事件表中每个文件描述符,观察是否有文件描述符就绪,如有,epoll_wait会以非阻塞方式返回,如果当次没处理,则该事件还会被后续的epoll_wait触发
ET(边缘触发),发现有事件就绪,就立即返回,若当时没有处理,下次也不会触发。

同步IO和异步IO

同步(阻塞)IO,在一个线程中,CPU执行代码的速度很快,一旦遇到IO操作,如读写文件,发送数据时,就需要等待IO操作完成,才能继续下一步操作。
异步(非阻塞)IO,当代码需要执行一个耗时的IO操作,它只发出IO指令,并不等待IO结果就去执行其他代码了,一段时间后,当IO返回结果,再通知CPU处理。

Web服务器如何处理及响应HTTP请求

可以使用线程池并发处理用户请求,主线程负责读写,工作线程负责处理逻辑(解析http报文等)。在之前的操作中,我们将服务器监听文件描述符中到达的客户连接请求接收,返回用于和用户通信的文件描述符,将这个文件描述符注册到epoll的内核事件表中,等待用户发送http请求。当epoll_wait发现此文件描述符就绪,主线程就将这个文件描述符上的HTTP报文读取到对应的用户缓存中作为一个任务对象,然后将这个任务对象的指针插入到线程池的请求对列中。

如何处理HTTP报文

首先要读取用户文件描述符上的数据,也就是http请求报文,http请求报文主要由请求行、请求头部、空行和请求数据四个部分组成。有两种请求报GET和POST,GET把参数包含在URL中,POST则通过request body传递参数。GET请求在URL中传送参数是有长度限制的。

后记

千里之行,始于足下。你还没有成功,那就代表你做的还不够,差点火候,日积月累必不可少。

C/C++ WebServer服务器一 也就是select,poll,epoll,可以通过一次系统调用,检查多个文件描述符的状态,相比于非阻塞 I/O,在文件描述符较多的场景下,避免了频繁的用户态和内核态的切换,减少了系统调用的开销。用于数据交互的read和write都是阻塞函数,在单线程下面,一个服务器想和多客户端进行通信,肯定是做不到的,因为accept,read,write都是阻塞的。但是这种做法缺点是,单线程的服务器模型中,主程序会不断阻塞的进行连接和数据通信两项工作,两项工作和主线程不独立,当连接请求比较多的时候,效率相对较低。 阅读详情

相关推荐

windows server 2016 配置web网页

web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。 这篇文章所讲述的是:使用http协议,搭建一个简易的网页 实验设备: windows server 2016 两台: web服务端 客户端 步骤1 :先来准备基础环境 1.关闭服务端和客户端的防火墙 2.配置ip地址让服务端和客户端ping通 服务端ip地址配置: ip :192.168.10.10 /24 dns :192.

zhangzc0408的博客 1万+

什么是web service?

Web服务(Web Service)是一种通过Web技术实现跨网络的应用程序之间相互交互的方式。它是一种基于网络的软件系统,用于提供标准化的方式来实现应用程序之间的互操作性。Web服务提供了一种标准化的协议和接口,允许应用程序通过网络进行通信和交互。它们使用XML(扩展标记语言)来描述和交换数据,并使用HTTP(超文本传输协议)作为传输协议。Web服务允许应用程序在不同的平台、编程语言和操作系统之间共享数据和服务,并且具有良好的互操作性、松散耦合和可扩展性。

AlphaFinance 2430

Windows server——部署web服务_windows server搭建web服务器

Internet最吸引用户的也许就是它的海量信息,通过浏览Web站点,用户可以知道最新的新闻,搜索到自己所需的资料,图片,视频,而所有这些都是基于WWW服务实现的,WWW服务被人们形象地称为Web服务。WWW服务,即万维网服务,是指在网上发布,并可以通过浏览器观看的图形化页面服务,万维网服务是通过建立Web站点来实现的,目前主流的Web服务软件有Apache和IIS。Apache是一款开源软件,用户可免费下载使用,支持UNIX.Linux.Windows等操作系统。Apache。

2401_84446580的博客 1665

webserve简介

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求 - 响应协议,它通常运行在TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。

qq_41032328的博客 6583

Embedded Server:像写main函数一样写Web Server

1.传统的JEE Web Server   传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tomcat等。在安装这些Container Server作为我们的开发或者部署环境时,我们还需要注意配置的一致性。   配置好Container Server以后,如果我们想开发一个Web App

kiwi_coder 6489

趣味学RUST基础篇(实战Web server)完结

呼……终于把前面那些忍术都学会了。”小新擦了擦汗,合上厚厚的《Rust 忍者秘籍》。小新瞪大了眼睛:“Web 服务器?那不是爸爸用来工作的大电脑吗?我也能做?”秘籍温柔地回答:“当然!今天,我们就用学到的所有知识,从最底层开始,亲手搭建一个能返回 ‘Hello, 动感超人!’ 的网站!就像搭积木一样简单!小新挠头:“服务器是啥?它怎么和我的浏览器说话?“想象一下,服务器就像一个永不挂机的‘客服中心’。它用一根叫的‘超级电话线’一直开着,等着别人打进来。当你在浏览器输入。

编码浪子的专栏 1266

使用Python创建一个简易的Web Server

Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中。使用该模块,可以快速创建一个简易的Web服务器。 我们在C:\Users\%USERNAME%\用户目录下,创建一个html目录,将html/jpg等网页文件拷贝到该目录下,启动一个cmd命令行窗口,进入html目录,执行如下命令即可创建一个简易...

丁丁爸爸的技术博客 6221

Web Server for Chrome 使用教程

是一个基于 Chrome 浏览器的 HTTP Web 服务器,使用 Chrome 的 sockets API 实现。该项目允许用户在本地或局域网内快速搭建一个简单的 Web 服务器,用于文件共享、Web 开发测试等场景。它支持自定义端口、接口配置、HTTP 请求处理、WebSocket 支持等功能。

m0_51274464的博客 1490

什么是webServer和为什么要用webServer

什么是webServer和为什么要用webServer

C++ Linux Web Server 面试基础篇-计网(一)

一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。

忆_恒心的博客 2184

C++ Linux Web Server 面试基础篇-计网(三)

【导读】Linux Web Server项目虽然是现在C++求职者的人手一个的项目,但是想要吃透这个项目,还是需要一定的基础的,以项目为导向,进行基础的学习。涵盖了计算机网络(网络编程)常见的知识点和常见的操作系统知识。

忆_恒心的博客 896

从零开始用Node.js写一个Web Server,非常基础

Node就不多做介绍了,安装node之后就可以用javascript写个web服务器程序,不用再下载安装什么Tomcat、IIS,并且性能出众。 1.去官网下载,安装之后,确认已添加到环境变量,cmd里敲一下,看看有没有进到node里: 配好环境之后就可以开始写js文件了。 2.新建一个back-end.js文件    这个js文件写的是后台程序。我们先写一个静态页面的服务器程序。 ...

six66667的博客 1046

ESP8266开发之旅 WebServer篇③ Asynchronous Web Server ——异步WebServer

文章目录1、前言2、Asynchronous Web Server2.1 Asynchronous Web Server优势2.2 电路原理2.3 工作原理3、代码4、测试结果 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。 快速导航 单片机菜鸟的博客快速索引(快速找到你要的) 重点说一下,麻烦三连点赞,你的点赞是博主创作的前进动力。 1、前言 建立一个异步的 ESP8266 Web Server

单片机菜鸟哥的博客 1681

手把手教你使用VScode+ESP-IDF在ESP32上搭建web server,并作为web socket server进行数据交互

手把手教你使用VScode+ESP-IDF在ESP32上搭建web server,并作为web socket server进行数据交互

weixin_45775305的博客 7330

C++ Linux Web Server 面试基础篇-计网(二)

【导读】Linux Web Server项目虽然是现在C++求职者的人手一个的项目,但是想要吃透这个项目,还是需要一定的基础的,以项目为导向,进行基础的学习。涵盖了计算机网络(网络编程)常见的知识点和常见的操作系统知识。

忆_恒心的博客 634

vWebServer-开源

vWebServer 是 windows 平台的 HTTP 服务器

用Python实现简单的Web Server

Refer: https://www.afternerd.com/blog/python-http-server/ Web Server的概念 用Python实现Web Server Python 2中SimpleHTTPServer模块被合并到Python 3的http.server模块。它支持目录浏览,指定端口,指定绑定地址等。 方法一:直接在命令行调用http.server模...

Hansel的专栏 1万+

WebServier接口的制作

部署Webservier接口的过程,服务端的部署和客户端的制作,

上一篇: 【linux服务器编程学习】9、多进程编程
下一篇: 操作系统知识速记1
Sweler*19
博客等级 码龄7年 65粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值