目录

都说webserver是C++选手人手必备的烂大街项目,那么webserver 还有必要做么?答案是要做,而且必须做,大家有的,我们也要有,而且webserver其实涉及到的技术和知识点是很多的,如果能一步一步把所有知识点掌握,其实在技术上是有很大的提升的,尤其是在对网络编程http这块,面试也有了和面试官聊天的底气。
顾名思义,Web Server 就是提供 Web 服务的 Server。比如我们访问 http:// http://baidu.com,其实就是在使用百度的 Server 提供的服务。一般来说, Web Server 对外提供的是 HTTP 服务(也可以是其他服务),这就是为什么我们的网址都以「http://」开头。
下面是有 Node.js 写的一个最简单的 HTTP server
- var http = require('http')
-
- var server = http.createServer( function (request, response){
- response.end('访问成功,你请求的路径是:' + request.url)
- })
-
- server.listen(8080, function(){
- console.log("正在监听 %s 端口", 8080);
- });
-
这里你不用看懂这段程序,你只需要知道两件事情:
那么这就是一个最简单的 HTTP server。

看到这里,我们大概对webserver这个项目有一定的认识了,我们需要做的就是实现一个程序,其主要功能是通过 HTTP协议与客户端(通常是浏览器(Browser))进行通信,来接收,存储,处理来自 客户端的 HTTP 请求,并对其请求做出 HTTP响应,返回给客户端其请求的内容(文件、网页等)或返回一个 Error 信息。
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
HTTP协议的作用原理包括四个步骤(具体):
1. 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
2. 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0 文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
3. 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
4. 关闭连接:客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接

然后合理运用GPT^-^ 嘿嘿 学习最快的方式之一是GPT 之二是关注我


然后再次合理运用GPT^-^ 嘿嘿 学习最快的方式之一是GPT 之二是关注我

状态代码的第一个数字是代表当前响应的类型(具体也可以GPT了解):
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
总结总之,webserver还是很值得做的,而且webserver包含的知识点很多,能够不查询资料手写webserver的都是狠人。一步一个脚印,相信一份耕耘一份收获,后续会更新手把手分享webserver项目的细节~