webserver烂大街?还有必要做么?

简介: webserver烂大街?还有必要做么?

       都说webserver是C++选手人手必备的烂大街项目,那么webserver 还有必要做么?答案是要做,而且必须做,大家有的,我们也要有,而且webserver其实涉及到的技术和知识点是很多的,如果能一步一步把所有知识点掌握,其实在技术上是有很大的提升的,尤其是在对网络编程http这块,面试也有了和面试官聊天的底气。        

什么是 Web Server?

顾名思义,Web Server 就是提供 Web 服务的 Server。比如我们访问 http:// http://baidu.com,其实就是在使用百度的 Server 提供的服务。一般来说, Web Server 对外提供的是 HTTP 服务(也可以是其他服务),这就是为什么我们的网址都以「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);
});
 

这里你不用看懂这段程序,你只需要知道两件事情:

  1. 这段程序监听了当前机器的 8080 端口。
  2. 一旦外部访问当前机器的 8080 端口,这段程序就会返回一段文字。

那么这就是一个最简单的 HTTP server。

       看到这里,我们大概对webserver这个项目有一定的认识了,我们需要做的就是实现一个程序,其主要功能是通过 HTTP协议与客户端(通常是浏览器(Browser))进行通信,来接收,存储,处理来自 客户端的 HTTP 请求,并对其请求做出 HTTP响应,返回给客户端其请求的内容(文件、网页等)或返回一个 Error 信息。

HTTP协议

简介

       超文本传输协议(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. 关闭连接:客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接

HTTP请求报文格式

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

HTTP响应报文格式

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

HTTP请求方法

  • GET:向指定的资源发出“显示”请求。使用 GET 方法应该只用在读取数据,而不应当被用于产生“副 作用”的操作中,例如在 Web Application 中。其中一个原因是 GET 可能会被网络蜘蛛等随意访 问。
  • HEAD:与 GET 方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文 部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该 资源的信息”(元信息或称元数据)。
  • POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含 在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除 Request-URI 所标识的资源。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • OPTIONS:这个方法可使服务器传回该资源所支持的所有 HTTP 请求方法。用’*'来代替资源名称, 向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能是否正常运作。
  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服 务器的链接(经由非加密的 HTTP 代理服务器)。

HTTP状态码

状态代码的第一个数字是代表当前响应的类型(具体也可以GPT了解):

1xx消息——请求已被服务器接收,继续处理

2xx成功——请求已成功被服务器接收、理解、并接受

3xx重定向——需要后续操作才能完成这一请求

4xx请求错误——请求含有词法错误或者无法被执行

5xx服务器错误——服务器在处理某个正确请求时发生错误

总结

       总之,webserver还是很值得做的,而且webserver包含的知识点很多,能够不查询资料手写webserver的都是狠人。一步一个脚印,相信一份耕耘一份收获,后续会更新手把手分享webserver项目的细节~

相关文章
|
运维 资源调度 Kubernetes
一文读懂 Kubernetes 大数据平台-CloudEon
Hello folks,我是 Luga,今天我们来分享一下关于 Kubernetes 大数据平台管理工具-CloudEon。作为一款基于 Kubernetes 大数据平台,CloudEon 旨在为管理 Kubernetes 大数据资源提供一种更直观和可视化的方式。
1149 0
|
安全
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
1246 0
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
401 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
7月前
|
人工智能 编解码 JSON
不看后悔!GitHub 开源 MultiTalk .8k star 强大的人语音+图像绑定项目
MultiTalk 是 GitHub 上的开源项目,具备音频驱动、多人对话视频生成功能。支持多路音频与图像绑定,实现高同步唇动与角色互动,适用于教学、虚拟人及短视频创作,已获 8k 星标。
694 0
|
人工智能 搜索推荐 数据挖掘
《人工智能:文化创意产业的变革先锋》
在数字化时代,文化创意产业正经历深刻变革,人工智能为其带来新机遇。在内容创作方面,AI辅助素材收集、创意生成与个性化创作;艺术鉴赏上,AI分析作品风格并智能推荐;文化遗产保护中,AI助力文物修复与数字化保存。未来,AI将推动跨界融合与创新,培养跨学科人才,为文创产业注入新活力。
415 9
|
传感器 人工智能 监控
数字孪生与灾害预测:提升应急响应能力
本文探讨了数字孪生技术在灾害预测和应急响应中的应用,通过实时监测、灾害模拟及应急响应优化,提高预警准确性与响应效率。以数字孪生北江为例,展示了其在防洪中的实际成效,展望了未来技术发展的广阔前景。
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
关系型数据库 MySQL 数据库
在 MySQL 中使用 Alter Table
【8月更文挑战第11天】
2449 0
在 MySQL 中使用 Alter Table
|
Java
Java Exception打印及输出到日志
有时候如果打印出异常的错误,并记录下来,这里记录一下
1059 5
|
自然语言处理 图形学
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
849 0

热门文章

最新文章