精华内容
下载资源
问答
  • 认准一件事后,就朝着这一件事走.做一个httpserver服务器,完整的代码,完整的设计.每个程序员都应该尝试下写博客 ...今天确定下web server的框架.linux下使用libevent作为基础框架来搭建这个web serve

    正好这段时间多,公司没啥项目.做一个httpserver服务器玩玩,平时多练练,在项目中开发时才能更加的顺手.

    每个程序员都应该尝试下写博客
    http://droidyue.com/blog/2017/01/02/why-every-programmer-should-try-to-write-blogs/

    目前开源的web服务器主要有:
    https://h2o.examp1e.net/

    http请求库libCURL

    我推荐一个比较小众的:
    http://iunknown.iteye.com/blog/59804

    1.先看完libevent.初步理解libevent的源代码这种事件驱动的网络框架

    暂时先采用C语言版来实现,后面再完善成C++版本.

    webserver模块分析和设计
    1.命令行解析功能
    命令行参数主要有哪些?服务器侦听端口,最大客户端数量,网站的根目录,配置文件名称,连接超时时间扥等

    2.配置文件解析(tinyxml库使用)
    配置文件为服务器的主配置选项,相同选项,配置文件的配置将覆盖命令行的配置.
    3.日志库
    使用glog库,分等级将日志输出.

    4.多客户端支持(网络传输层,负责接收连接,数据接收,数据发送)
    连接的处理,请求数据的接收,响应数据的发送,客户端请求到来的时候,主线程查看线程池中是否有空闲的工作线程,
    有:分配任务,没有:创建新的线程.此处采用libevent框架来实现.减少多余的网络问题.

    5.http头部分析
    5.1解析http method,如GET,POST,HEAD等等
    5.2 解析http的版本
    5.3 解析URI,即请求资源的地址.

    6.http URI的分析设计
    请求主机的位置以’/‘开始,资源位置的最后一个’/'后的字符串为实际请求的文件名.需要根据文件名来判断请求资源的类型,对于一个以"%"开头的字符,需要进行转换后使用真正的值,其后面的两个字符拼成一个字符.

    7.http支持方法的分析设计
    暂时仅支持GET方法,服务器对应GET方法的处理逻辑分为:
    头部信息的组织(http response响应的头部信息)
    文件内容的发送

    8.http支持CGI的分析设计(查阅http CGI的资料和使用方法)

    9.http错误处理的分析设计
    9.1用户的请求发生错误
    9.2服务器端发生错误
    9.3网络传输过程中发生错误时

    类设计
    多客户端并发支持->网络类,libevent构造网络框架

    展开全文
  • Web服务器功能

    千次阅读 2014-06-04 17:51:55
    单线程web服务器多线程web服务器复用的I/O服务器复用的多线程web服务器 第三、处理请求 一旦web服务器收到了请求,就可以根据方法、资源和首部来对请求进行处理 第四、对资源的映射及访问 web服务器是资源服务器,

    第一、建立连接

    接受一个客户端连接

    第二、接受请求报文

    web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来

    web服务器处理结构分类:

    • 单线程web服务器
    • 多线程web服务器
    • 复用的I/O服务器
    • 复用的多线程web服务器

    第三、处理请求

    一旦web服务器收到了请求,就可以根据方法、资源和首部来对请求进行处理

    第四、对资源的映射及访问

    web服务器是资源服务器,负责发送预先创建好的资源

    第五、构建响应

    web服务器识别出资源后,就执行请求方法中描述的动作,并且构建响应状态码、响应首部、响应主题

    响应报文通常包括:

    1. MIMEL类型的content-type
    2. content-length
    3. 实体内容

    重定向:

    web服务器有时会返回重定向响应而不是成功的报文,可以将浏览器重定向到其他地方去执行请求,状态码是3XX,重定向可能出现如下几种情况:

    1.永久搬离的资源 ,状态码是301

    2.临时搬离的资源,如果资源被临时移走或重命名,服务器可能希望将客户端重定向到新的位置上去,但因为是临时的,服务器希望客户端仍然会使用老的URL,并且收藏夹的url也不会发生变化,返回303状态码

    第六、发送响应

    服务器跟客户端会有多个连接,有些事空闲的,有些事持久的,对非持久连接,发送报文后,应该关闭。

    对于持久连接,要正确地计算content-length,否则客户端就不知道什么时候响应结束了,因为多个HTTP请求在一个TCP连接上跑,对于多媒体类型,用分块传输的方式,如果content-length错误,事务处理的另一端就无法精确地检测出一条报文的结束和另一条报文的开始

    第七、记录日志

    展开全文
  • 搭建web服务器OTA功能

    千次阅读 2018-03-28 14:51:12
    网上已经有很多搭建的方式了,我这里用最简单的方法搞定下载功能 ...搭建web服务器下载功能: 首先下载apache:sudo apt-get install apache 然后 sudo vim /etc/apache2/sites-available/000-default.con...

    网上已经有很多搭建的方式了,我这里用最简单的方法搞定下载功能

    对IOT产品的开发一个必不可少的功能就是设备的OTA功能,因为完美的程序员,很多产品随着时间更加的优化,等等

    搭建web服务器下载功能:

    首先下载apache:sudo apt-get install apache

    然后 sudo vim /etc/apache2/sites-available/000-default.conf
    请注意在下面不换行
    DocumentRoot /var/www/html

      <Directory /var/www>                                                                         
          Options Indexes FollowSymLinks MultiViews                                                
          AllowOverride None                                                                       
          Order allow,deny                                                                         
          allow from all                                                                           
      </Directory>
    

    接着修改目录权限:sudo chmod -R 775 /var/www
    由ubuntu的IP地址通过浏览器进入,可以直接进入到了apache的欢迎页面,然后在/var/www目录下可以添加任意的文件

    开始注意了,这个时候会发现文件除了bin 文件别的都是只能网页打开的,像压缩文件、txt、7z文件都不能进行下载。

    解决方法:在 /etc/mime.types 找到这个选项application/octet-stream 在后面添加文件后缀比如 7z等格式就可以下载了(要sudo service apache2 restart)

    /etc/mime.types 是apache很重要的文件配置,很多文件格式都在里面,具体的请百度

    展开全文
  • c#实现Web服务器

    千次阅读 2014-10-31 18:23:49
    学习C#时,经常会遇到Web服务器功能的程序设计问题,这里将介绍C#实现Web服务器功能的程序设计问题的解决方法。 C#实现Web服务器功能的程序设计 根据HTTP协议的作用原理,实现GET请求的Web服务器程序的方法...

    学习C#时,经常会遇到Web服务器功能的程序设计问题,这里将介绍C#实现Web服务器功能的程序设计问题的解决方法。

    C#实现Web服务器功能的程序设计

    根据HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下:

    创建TcpListener类对象,监听某端口(任意输入闲置端口 如:8080 )。等待、接受客户机连接到该端口,得到与客户机连接的socket;从与socket关联的输入流中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0。从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名;

    如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;关闭与相应Web浏览器连接的socket字。

    C#实现Web服务器功能的代码如下:

     
    1. using System;  
    2. using System.IO;  
    3. using System.Net;  
    4. using System.Net.Sockets;  
    5. using System.Text;  
    6. using System.Threading ;  
    7.  
    8. class MyWebServer  
    9. {  
    10.  
    11. private TcpListener myListener ;  
    12. private int port = 8080 ; // 选者任何闲置端口  
    13.  
    14. //开始兼听端口  
    15. //同时启动一个兼听进程  
    16. public MyWebServer()  
    17. {  
    18. try  
    19. {  
    20. //开始兼听端口  
    21. myListener = new TcpListener(port) ;  
    22. myListener.Start();  
    23. Console.WriteLine("Web Server Running... Press ^C to Stop...");  
    24. //同时启动一个兼听进程 ''StartListen''  
    25. Thread th = new Thread(new ThreadStart(StartListen));  
    26. th.Start() ;  
    27.  
    28. }  
    29. catch(Exception e)  
    30. {  
    31. Console.WriteLine("兼听端口时发生错误 :" +e.ToString());  
    32. }  
    33. }  
    34. public void SendHeader(string sHttpVersion, string sMIMEHeader, 
      int iTotBytes, string sStatusCode, ref Socket mySocket)  
    35. {  
    36.  
    37. String sBuffer = "";  
    38.  
    39. if (sMIMEHeader.Length == 0 )  
    40. {  
    41. sMIMEHeader = "text/html"; // 默认 text/html  
    42. }  
    43.  
    44. sBuffersBuffer = sBuffer + sHttpVersion + sStatusCode + "\r\n";  
    45. sBuffersBuffer = sBuffer + "Server: cx1193719-b\r\n";  
    46. sBuffersBuffer = sBuffer + "Content-Type: " + sMIMEHeader + "\r\n";  
    47. sBuffersBuffer = sBuffer + "Accept-Ranges: bytes\r\n";  
    48. sBuffersBuffer = sBuffer + "Content-Length: " + iTotBytes + "\r\n\r\n";  
    49.  
    50. Byte[] bSendData = Encoding.ASCII.GetBytes(sBuffer);  
    51.  
    52. SendToBrowser( bSendData, ref mySocket);  
    53.  
    54. Console.WriteLine("Total Bytes : " + iTotBytes.ToString());  
    55.  
    56. }  
    57.  
    58. public void SendToBrowser(String sData, ref Socket mySocket)  
    59. {  
    60. SendToBrowser (Encoding.ASCII.GetBytes(sData), ref mySocket);  
    61. }  
    62.  
    63. public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)  
    64. {  
    65. int numBytes = 0;  
    66.  
    67. try  
    68. {  
    69. if (mySocket.Connected)  
    70. {  
    71. if (( numBytes = mySocket.Send(bSendData, bSendData.Length,0)) == -1)  
    72. Console.WriteLine("Socket Error cannot Send Packet");  
    73. else  
    74. {  
    75. Console.WriteLine("No. of bytes send {0}" , numBytes);  
    76. }  
    77. }  
    78. else  
    79. Console.WriteLine("连接失败....");  
    80. }  
    81. catch (Exception e)  
    82. {  
    83. Console.WriteLine("发生错误 : {0} ", e );  
    84.  
    85. }  
    86. }  
    87. public static void Main()  
    88. {  
    89. MyWebServer MWS = new MyWebServer();  
    90. }  
    91. public void StartListen()  
    92. {  
    93.  
    94. int iStartPos = 0;  
    95. String sRequest;  
    96. String sDirName;  
    97. String sRequestedFile;  
    98. String sErrorMessage;  
    99. String sLocalDir;  
    100.  
    101. String sMyWebServerRoot = "E:\\MyWebServerRoot\\"; //设置你的虚拟目录  
    102.  
    103. String sPhysicalFilePath = "";  
    104. String sFormattedMessage = "";  
    105. String sResponse = "";  
    106.  
    107. while(true)  
    108. {  
    109. //接受新连接  
    110. Socket mySocket = myListener.AcceptSocket() ;  
    111.  
    112. Console.WriteLine ("Socket Type " +mySocket.SocketType );  
    113. if(mySocket.Connected)  
    114. {  
    115. Console.WriteLine("\nClient Connected!!\n=\nCLient IP {0}\n",mySocket.RemoteEndPoint) ;  
    116.  
    117. Byte[] bReceive = new Byte[1024] ;  
    118. int i = mySocket.Receive(bReceive,bReceive.Length,0) ;  
    119.  
    120. //转换成字符串类型  
    121. string sBuffer = Encoding.ASCII.GetString(bReceive);  
    122.  
    123.  
    124. //只处理"get"请求类型  
    125. if (sBuffer.Substring(0,3) != "GET" )  
    126. {  
    127. Console.WriteLine("只处理get请求类型..");  
    128. mySocket.Close();  
    129. return;  
    130. }  
    131.  
    132. // 查找 "HTTP" 的位置  
    133. iStartPos = sBuffer.IndexOf("HTTP",1);  
    134.  
    135. string sHttpVersion = sBuffer.Substring(iStartPos,8);  
    136.  
    137. // 得到请求类型和文件目录文件名  
    138. sRequest = sBuffer.Substring(0,iStartPos - 1);  
    139.  
    140. sRequest.Replace("\\","/");  
    141.  
    142. //如果结尾不是文件名也不是以"/"结尾则加"/"  
    143. if ((sRequest.IndexOf(".") <1) && (!sRequest.EndsWith("/")))  
    144. {  
    145. sRequestsRequest = sRequest + "/";  
    146. }  
    147.  
    148. //得带请求文件名  
    149. iStartPos = sRequest.LastIndexOf("/") + 1;  
    150. sRequestsRequestedFile = sRequest.Substring(iStartPos);  
    151.  
    152. //得到请求文件目录  
    153. sDirName = sRequest.Substring(sRequest.IndexOf("/"), sRequest.LastIndexOf("/")-3);  
    154.  
    155. //获取虚拟目录物理路径  
    156. sLocalDir = sMyWebServerRoot;  
    157.  
    158. Console.WriteLine("请求文件目录 : " + sLocalDir);  
    159.  
    160. if (sLocalDir.Length == 0 )  
    161. {  
    162. sErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>";  
    163. SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);  
    164. SendToBrowser(sErrorMessage, ref mySocket);  
    165. mySocket.Close();  
    166. continue;  
    167. }  
    168.  
    169. if (sRequestedFile.Length == 0 )  
    170. {  
    171. // 取得请求文件名  
    172. sRequestedFile = "index.html";  
    173. }  
    174.  
    175.  
    176. String sMimeType = "text/html";  
    177.  
    178. sPhysicalFilePath = sLocalDir + sRequestedFile;  
    179. Console.WriteLine("请求文件: " + sPhysicalFilePath);  
    180.  
    181. if (File.Exists(sPhysicalFilePath) == false)  
    182. {  
    183.  
    184. sErrorMessage = "<H2>404 Error! File Does Not Exists...</H2>";  
    185. SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);  
    186. SendToBrowser( sErrorMessage, ref mySocket);  
    187.  
    188. Console.WriteLine(sFormattedMessage);  
    189. }  
    190.  
    191. else  
    192. {  
    193. int iTotBytes=0;  
    194.  
    195. sResponse ="";  
    196.  
    197. FileStream fs = new FileStream(sPhysicalFilePath, 
      FileMode.Open, FileAccess.Read, FileShare.Read);  
    198.  
    199. BinaryReader reader = new BinaryReader(fs);  
    200. byte[] bytes = new byte[fs.Length];  
    201. int read;  
    202. while((read = reader.Read(bytes, 0, bytes.Length)) != 0)  
    203. {  
    204. sResponsesResponse = sResponse + Encoding.ASCII.GetString(bytes,0,read);  
    205.  
    206. iTotBytesiTotBytes = iTotBytes + read;  
    207.  
    208. }  
    209. reader.Close();  
    210. fs.Close();  
    211.  
    212. SendHeader(sHttpVersion, sMimeType, iTotBytes, " 200 OK", ref mySocket);  
    213. SendToBrowser(bytes, ref mySocket);  
    214. //mySocket.Send(bytes, bytes.Length,0);  
    215. }  
    216. mySocket.Close();  
    217. }  
    218. }  
    219. }  
    220. }  
    展开全文
  • WEB服务器与应用服务器

    千次阅读 2015-06-15 21:50:39
    Web服务器(Web Server)通俗的讲,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。与客户端的网络浏览器配合。因为Web服务器主 要支持的协议就是HTTP,所以通常情况下HTTP...
  • Win10 IIS Web服务器安装与配置

    万次阅读 多人点赞 2018-01-04 21:53:00
    这几天课程实训,使用 IIS 配置服务器,课本上内容太久,老师也没有讲过,自己摸索了一下,所以记录一下 安装 IIS 打开程序和功能,选择左边启用或关闭 Windows 功能,建议根据下图勾选,确定后等待安装完成 打开 ...
  • 3、常见的WEB服务器 目前,最主流的WEB服务器有以下几个: IIS Apache Tomcat Nginx 3.1 IIS服务器 Internet Information Services(简称IIS),是微软公司推出的WEB服务器组件,也是Windows Server默认,特有的...
  • web服务器、Web中间件和Web容器的区别

    万次阅读 多人点赞 2018-11-25 20:36:21
    Web服务器 中间件 容器 总结 Web开发的选择 我们经常会被Web服务器、Web容器和Web中间件这三个概念搞混。因为我们常见的很多网站要么是由IIS搭建,要么是由Apache、Tomcat、Ngnix搭建。所以,我们会把他们都叫...
  • web服务器与ftp服务器的区别

    千次阅读 2017-08-25 17:10:03
    WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服 务。 (1)应用层使用HTTP协议。 (2)HTML文档格式。 (3)浏览器统一资源定位器(URL)。 WWW代表万维网的意思 WWW 是 Internet 的多媒体...
  • WEB服务器与应用服务器的区别

    千次阅读 2016-08-05 18:07:47
    WEB服务器与应用服务器的区别: 1.WEB服务器: 理解WEB服务器,首先你要理解什么是WEB?WEB你可以简单理解为你所看到的HTML页面就是WEB的数据元素,处理这些数据元素的应用软件就叫WEB服务器,如IIS、apache。 WEB...
  • 什么是WEB服务器? 常用的WEB服务器有哪些?   一、什么是WEB服务器  Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求Web服务器可以...
  • Java中常用WEB服务器和应用服务器

    万次阅读 2018-06-29 15:20:31
    一、web服务器和应用服务器的区别 Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是...
  • web服务器和应用服务器的区别

    千次阅读 2017-05-26 17:37:54
    1.WEB服务器一般是通用的,而应用服务器一般是专用的。(如Tomcat只处理Java应用程序而不能处理ASPX或PHP。而Apache是一个WEB服 务器f(HTTP服务器),后来连接Tomcat应用服务器来支持java。) 2.WEB服务器: ...
  • Web服务器有哪些(转)

    万次阅读 2019-04-30 16:15:34
    文章目录1、什么是web服务器1.1 Web Service架构和云1.2 Web Service的优势1.3 Web service的发展趋势1.3 本地服务的缺陷2、web服务器有哪些2.1 Apache2.2 IIS2.3 Nginx2.4 Tomcat2.5 Lighttpd2.6 Zeus 1、什么是web...
  • web服务器、应用服务器和常见的服务器概念

    千次阅读 多人点赞 2020-04-17 16:36:01
    什么是web服务器,什么是应用服务器? 浏览器的编译原理是什么? http的头文件为何要这样配置? Nginx,Apache等为何要这样操作? 不同的服务器软件有什么作用? 而网上关于http的实战讲解一般都是以操作为主,涉及...
  • 常见Web服务器简介

    万次阅读 多人点赞 2014-08-11 18:37:59
    Web服务器也称为WWW (WORLD WIDE WEB)服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。  Unix和Linux平台下的常用Web服务器有Apache,Nginx,Lighttpd,Tomcat,IBM WebSphere、BEA Weblogic等,其中应用最...
  • 区分Web服务器、HTTP服务器、应用程序服务器

    万次阅读 多人点赞 2018-04-04 16:58:08
    在学习前端的过程中。进程听到和看到web服务器、HTTP服务器、应用程序服务器,但一直不知道它们有什么区别,迷惑...其主要功能是传送页面使浏览器可以浏览,又因为它主要支持HTTP协议,所以通常情况下web服务器和HT...
  • 搭建web服务器

    万次阅读 2016-10-26 16:08:44
    集成环境:PHPstudy,appserve,wamp,xamp,不需要单独安装和配置,可以直接当做一个动态web服务器使用。 因为集成环境是由第三方提供,存在一定的安全隐患。所以,真实的项目中,服务器端的部署都是使用单独安装后...
  • Web服务器和http请求

    千次阅读 2017-04-07 17:07:35
    Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。1、Web服务器具有以下特点:  Web服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。 ...
  • web服务器:负责处理http请求,响应静态文件,常见的有Apache,Nginx以及微软的IIS. 应用服务器:负责处理逻辑的服务器。比如php、python的代码,是不能直接通过nginx这种web服务器来处理的,只能通过应用服务器来...
  • 常用的WEB服务器简介

    万次阅读 2018-06-22 10:55:57
    常用的WEB服务器 WEB服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。Unix和Linux平台下常用的服务器有Apache、Nginx、Lighttpd、Tomcat、IBM WebSphere等,其中应用最广泛的是Apache。而...
  • web服务器与APP服务器

    千次阅读 2009-01-28 22:40:00
    web服务器与APP服务器通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),...
  • web 服务器有哪些

    万次阅读 多人点赞 2018-08-27 16:53:49
    什么是web服务器 "网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。 Web Service架构和云 如果一个软件的主要部分采用了"网络服务",即它把存储或计算环节"外包"...
  • android客户端与web服务器端的文件上传与下载源代码,和android录音功能。 HttpDownloader.java:下载文件 FileUtil.java:post方法上传文件 MainActivity.java:录音功能 TestFileActivity.java:测试文件的上传与...
  • 前面提到的一些缓存技术都是有我们的动态才程序控制的,现在的web服务器功能越来越强大,常用的web服务器软件也都内置了缓存功能,下面我们就简单的说下服务器端缓存的应用.  首先,我们先来介绍一下URL映射,对于...
  • 如何使用nodejs创建Web服务器

    万次阅读 多人点赞 2017-06-04 17:03:33
    Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。 大多数 web 服务器都...
  • 在线免费服务器,免费web服务器Tomcat

    千次阅读 2021-08-02 05:48:21
    轻量级简单web服务器 Tomcat简述Tomcat是什么?下面这段是对Tomcat的一个百度解释:Tomcat三协议:说白了Tomcat就是一个web服务器,主要用于网页制作的使用应为它的免费开源、大多数的协议规范都能在上面实现所以用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 974,998
精华内容 389,999
关键字:

web服务器功能